最近在做接口的加密,发现jsp发过来的3DES加密字节和我这边aspx加密的对不上,方法如下:.net方法:
public static byte[] Encrypt3Des(byte[] bytes, string aStrKey)
    {
        var des = new TripleDESCryptoServiceProvider();
        des.Key = Encoding.UTF8.GetBytes(aStrKey);
        des.Mode = CipherMode.ECB;
        des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
        ICryptoTransform desEncrypt = des.CreateEncryptor();
        return desEncrypt.TransformFinalBlock(bytes, 0, bytes.Length);
    }java方法:
public static byte[] encryptRes(byte[] data, String keyStr) {
SecretKey key = getSecretKey(keyStr);
// 定义加密算法,可用DES,DESede,Blowfish
String Algorithm = "DESede";
// 加密随机数生成器(RNG),(可以不写)
SecureRandom sr = new SecureRandom();
// 定义要生成的密文
byte[] cipherByte = null;
try {
// 得到加密/解密器
Cipher c1 = Cipher.getInstance(Algorithm);
// 用指定的密钥和模式初始化Cipher对象
// 参数:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)
c1.init(Cipher.ENCRYPT_MODE, key, sr);
// 对要加密的内容进行编码处理
cipherByte = c1.doFinal(data);
} catch (Exception e) {
// TODO: handle exception
}最终发现大家字节对不上,以字符“a”为例:
对方-3DES加密:
{56,48,201,9,133,86,35,241,}
我方-3DES加密:
{51,170,200,140,195,183,16,25,}
我的能成功解密为字节{97},但是不能解密对方的字节高手请教,求救命~~~~~~~~~~~~~~~~~~~~~·

解决方案 »

  1.   

    补上秘匙key:#3^g$e%r@w*o&s(201110200
      

  2.   

    再补上.net的解密方法:    public static byte[] Decrypt3Des(byte[] bytes, string aStrKey)
        {
            var des = new TripleDESCryptoServiceProvider();
            des.Key = Encoding.UTF8.GetBytes(aStrKey);
            des.Mode = CipherMode.ECB;
            des.Padding = PaddingMode.PKCS7;
            ICryptoTransform desDecrypt = des.CreateDecryptor();
            return desDecrypt.TransformFinalBlock(bytes, 0, bytes.Length);
        }
      

  3.   

    JAVA中SecretKey key = getSecretKey(keyStr);
    没有明确显示key的获取方式,必须看到getSecretKey的方法内容。或者你也可以尝试修改.NET中的这行:des.Key = Encoding.UTF8.GetBytes(aStrKey);
    改为Encoding.Defalut.GetBytes(aStrKey);问题应该是这个密钥字符串到byte[]转换的编码上,多试几种,应该能成功。
      

  4.   

    应该是两次生成的key不一致造成成的.