DES加解密NET 和JAVA互通

JAVA加密代码, 默认是ECB模式

 private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        // 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
 
        // 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);
 
        // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey securekey = keyFactory.generateSecret(dks);
 
        // Cipher对象实际完成加密操作
        Cipher cipher = Cipher.getInstance("DES");
 
        // 用密钥初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
 
        return cipher.doFinal(data);
    }

C# 加解密代码

public static string DESDecrypt(string encryptStr, string encryptKey)
        {
            byte[] inputByteArray = Convert.FromBase64String(encryptStr);

            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            des.Mode = CipherMode.ECB;// 注意这里:如果没有这句,则始终加密过后字符串与java不一致
            //des.Padding = PaddingMode.PKCS7;
            des.Key = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));

            using MemoryStream memoryStream = new MemoryStream(inputByteArray);

            byte[] bytes;
            using (var stream = new CryptoStream(memoryStream, des.CreateDecryptor(), CryptoStreamMode.Read))
            {
                bytes = new byte[inputByteArray.Length];
                stream.Read(bytes, 0, bytes.Length);
            }

            return Encoding.UTF8.GetString(bytes.ToArray());
        }

        public static string DESEncrypt(string encryptStr, string encryptKey)
        {
            byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(encryptStr);

            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            des.Mode = CipherMode.ECB;// 注意这里:如果没有这句,则始终加密过后字符串与java不一致
            des.Key = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Convert.ToBase64String(ms.ToArray());
        }

测试结果:

var key = "Role-Data-Secret";
var originText = "d66636453be042ffb67a3b3b7cd56df9";
Console.WriteLine($"原始: " + originText);
var encryptStr = DesHelper.DESEncrypt(originText, key);
Console.WriteLine($"密文:" + encryptStr);
var plainText = DesHelper.DESDecrypt(encryptStr, key);
Console.WriteLine($"解密结果:" + plainText);

Console.WriteLine(plainText);

posted @ 2023-04-20 14:07  墨戟沉沙  阅读(96)  评论(0编辑  收藏  举报