wannianchuan
V2EX  ›  外包

100¥现金求一个用 php 实现的能与 Java/.Net 互通的 DES 加密算法

  •  
  •   wannianchuan · May 13, 2014 · 1754 views
    This topic created in 4410 days ago, the information mentioned may be changed or developed.
    要求:

    用加密KEY: SpanDivAHFont0531
     加密算法:DES
     加密编码:Base64
    将 371325751788249 加密后能得到 sWql7JYSxGRhqgjOfx+9gQ==

    该加密结果已通过下面的.Net代码验证

    有能解的朋友请加QQ:279443771 ,注明:des加密
    也可点击网站上的QQ号直接发消息: http://wannianchuan.net/
    加密结果通过验证后立即付款。

    参考:
    .Net代码

    public static class DES
    {
    //默认密钥向量
    private static byte[] Keys = { 1, 2, 3, 4, 5, 6, 7, 8 };
    public static string Encode(string encryptString, string encryptKey)
    {
    encryptKey = encryptKey.Substring(0, 8);
    byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey);
    byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
    DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
    dCSP.Key = rgbKey;
    dCSP.IV = Keys;
    dCSP.Padding = PaddingMode.PKCS7;
    MemoryStream mStream = new MemoryStream();
    CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(), CryptoStreamMode.Write);
    cStream.Write(inputByteArray, 0, inputByteArray.Length);
    cStream.FlushFinalBlock();
    return Convert.ToBase64String(mStream.ToArray());
    }

    public static string Decode(string decryptString, string decryptKey)
    {
    try
    {
    decryptKey = decryptKey.Substring(0, 8);
    byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
    byte[] inputByteArray = Convert.FromBase64String(decryptString);
    DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
    DCSP.Key = rgbKey;
    DCSP.IV = Keys;
    DCSP.Padding = PaddingMode.PKCS7;

    MemoryStream mStream = new MemoryStream();
    CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(), CryptoStreamMode.Write);
    cStream.Write(inputByteArray, 0, inputByteArray.Length);
    cStream.FlushFinalBlock();
    return Encoding.UTF8.GetString(mStream.ToArray());
    }
    catch(Exception ex)
    {
    return ex.Message;
    }
    }

    string a = DES.Encode("371325751788249", "SpanDivAHFont0531");
    Response.Write(a + "<br>" + DES.Decode(a,"SpanDivAHFont0531"));
    //// sWql7JYSxGRhqgjOfx+9gQ==
    //// 371325751788249


    另外附上Java代码:

    private static byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
    IvParameterSpec zeroIv = new IvParameterSpec(iv);
    SecretKeySpec key = new SecretKeySpec(getKey(encryptKey.getBytes()), "DES");
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
    byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
    return Base64.encode(encryptedData);
    8 replies    2014-05-14 10:36:34 +08:00
    explon
        1
    explon  
       May 13, 2014
    首信易支付 SDK 里面有
    wannianchuan
        2
    wannianchuan  
    OP
       May 13, 2014
    @explon 在网上找了好多代码 都不行 我去看看你说的这个
    wannianchuan
        3
    wannianchuan  
    OP
       May 13, 2014
    @explon 首信易支付 SDK在那里正找到,我在他们网站上没找到呢
    Sunyanzi
        4
    Sunyanzi  
       May 13, 2014
    刚好有点时间 ... 这事儿我接了吧 ... 先占坑 ... 等等补代码 ...
    Sunyanzi
        5
    Sunyanzi  
       May 13, 2014   ❤️ 1
    done ...

    https://gist.github.com/qex/0632281caaaa3bb2a163

    以及钱就算了 ... 不差这一百块钱 ...
    sun019
        6
    sun019  
       May 13, 2014
    孙燕姿 果然不差钱 不错!!
    wannianchuan
        7
    wannianchuan  
    OP
       May 14, 2014
    @Sunyanzi 多谢,我试一下
    wannianchuan
        8
    wannianchuan  
    OP
       May 14, 2014
    @Sunyanzi 真高人也,问题解决了,再次感谢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5447 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 08:28 · PVG 16:28 · LAX 01:28 · JFK 04:28
    ♥ Do have faith in what you're doing.