C#与JAVA的DES加密结果一致的参数设置

来源:互联网 发布:步步高i270软件下载 编辑:程序博客网 时间:2024/05/21 05:58
文章出自 http://blog.csdn.net/soar_ersa/article/details/7550359
DES加密解密结果一般要注意的地方:密钥、偏移量、块密码模式、填充模式java DES加密的时候:如果使用这种方式,Cipher cipher = Cipher.getInstance("DES"); 此时块密码模式去ECB模式,C#DES类默认模式是CBC模式,所以如果java使用上面的方式进行初始化的时候,使用C#解密的时候要记得设置Mode属性为ECB,另外,如果没有设置偏移量,C#解密的时候Key和IV设置成一样的就可以进行正常解密了。所以对于上面java的第2种DES加密方法,使用C#解密的时候只需要在解密之前加上"provider.Mode = CipherMode.ECB;"就可以了。
最近需要使用C#的DES解密工具类解密字符串,但是要解密的字符串是使用java进行DES加密的,去网上查了关于C#和java关于DES加密解密的资料,发现可以相互加密解密的时候,
java进行DES加密一般都会写成如下:
public static byte[] encrypt(String message, String key) throws Exception {   
  Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");   //这里指定了CBC模式. 如果是Cipher.getInstance("DES")则是EBC模式

  DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));   

  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");   
  // 密钥
  SecretKey secretKey = keyFactory.generateSecret(desKeySpec);   
  // 偏移量
  IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));   
  cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);   

//SecureRandom sr = new SecureRandom();
//cipher.init(Cipher.ENCRYPT_MODE, secretKey, sr);   //这种没有偏移量的init ,偏移量就是key
  return cipher.doFinal(message.getBytes("UTF-8"));   
}

C#对应的加密方法
public static string DesEncrypt(string pToEncrypt, string sKey)
        {
            string DecryptText = string.Empty;
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            {
                des.Mode = CipherMode.ECB;//这里指定加密模式为ECB
                byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);
                des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    cs.Close();
                }
                string str = Convert.ToBase64String(ms.ToArray());
                ms.Close();
                return str;
            }
        }
0 0
原创粉丝点击