V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wannianchuan
V2EX  ›  外包

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

  •  
  •   wannianchuan · 2014-05-13 14:45:40 +08:00 · 1036 次点击
    这是一个创建于 3828 天前的主题,其中的信息可能已经有所发展或是发生改变。
    要求:

    用加密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 条回复    2014-05-14 10:36:34 +08:00
    explon
        1
    explon  
       2014-05-13 15:37:04 +08:00
    首信易支付 SDK 里面有
    wannianchuan
        2
    wannianchuan  
    OP
       2014-05-13 15:44:04 +08:00
    @explon 在网上找了好多代码 都不行 我去看看你说的这个
    wannianchuan
        3
    wannianchuan  
    OP
       2014-05-13 16:30:32 +08:00
    @explon 首信易支付 SDK在那里正找到,我在他们网站上没找到呢
    Sunyanzi
        4
    Sunyanzi  
       2014-05-13 16:51:22 +08:00
    刚好有点时间 ... 这事儿我接了吧 ... 先占坑 ... 等等补代码 ...
    Sunyanzi
        5
    Sunyanzi  
       2014-05-13 17:09:39 +08:00   ❤️ 1
    done ...

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

    以及钱就算了 ... 不差这一百块钱 ...
    sun019
        6
    sun019  
       2014-05-13 18:23:15 +08:00
    孙燕姿 果然不差钱 不错!!
    wannianchuan
        7
    wannianchuan  
    OP
       2014-05-14 10:34:52 +08:00
    @Sunyanzi 多谢,我试一下
    wannianchuan
        8
    wannianchuan  
    OP
       2014-05-14 10:36:34 +08:00
    @Sunyanzi 真高人也,问题解决了,再次感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:56 · PVG 04:56 · LAX 12:56 · JFK 15:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.