JAVA DES加密(DES/ECB/PKCS5Padding)和C#加密对应设置

来源:互联网 发布:亿乐社区系统 v2.0源码 编辑:程序博客网 时间:2024/05/18 01:46
java的:
public static String encryptDES(String paramString1, String paramString2)      throws Exception    {            SecretKeySpec localSecretKeySpec = new SecretKeySpec(paramString2.getBytes(), "DES");      Cipher localCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");      localCipher.init(1, localSecretKeySpec);      return Base64.encode(localCipher.doFinal(paramString1.getBytes()));    }
对应的C#的加密解密如下:
    /// <summary>    /// DES加密    /// </summary>    public class DES    {        /// <summary>        /// <param name="pToEncrypt">需要加密的字符串</param>          /// <param name="sKey">密钥</param>          /// <summary>        /// 进行DES加密        /// </summary>        public  string Encrypt(string pToEncrypt, string sKey)        {            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())                   {                byte[] keys = new byte[8];                for (int i = 0; i < 8; i++)                {                    keys[i] = Convert.ToByte(sKey.Substring(i * 2, 2), 16);                }                byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);                des.Key = keys;                des.IV = keys;                des.Padding = PaddingMode.PKCS7;                des.Mode = CipherMode.ECB;                MemoryStream ms = new MemoryStream();                using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))                             {                    cs.Write(inputByteArray, 0, inputByteArray.Length);                    cs.FlushFinalBlock();                    cs.Close();                }                string base64 = Convert.ToBase64String(ms.ToArray());                ms.Close();                return base64;            }        }        /// <param name="pToEncrypt">需要解密的字符串</param>          /// <param name="sKey">密钥</param>          // <summary>        // 进行DES解密        // </summary>         public  string Decrypt(string pToDecrypt, string sKey)        {            byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);                    using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())            {                byte[] keys = new byte[8];                for (int i = 0; i < 8; i++)                {                    keys[i] = Convert.ToByte(sKey.Substring(i * 2, 2), 16);                }                des.Key = keys;                des.IV = keys;                des.Padding = PaddingMode.PKCS7;                des.Mode = CipherMode.ECB;                MemoryStream ms = new MemoryStream();                using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))                {                    cs.Write(inputByteArray, 0, inputByteArray.Length);                    cs.FlushFinalBlock();                    cs.Close();                }                string str = Encoding.UTF8.GetString(ms.ToArray());                ms.Close();                return str;            }        }         }

  好好看了下java的代码相关,注意到下面这句代码:

  Cipher.getInstance("DES/ECB/PKCS5Padding");

  搜索相关,java的PKCS5Padding 对应C#的des.Padding = PaddingMode.PKCS7;但是结果还是对应不上。

  还需要设置C#的des.Mode = CipherMode.ECB;

网上找的秘钥生成那一块有点问题 需要修改一下

  

               byte[] keys = new byte[8];                for (int i = 0; i < 8; i++)                {                    keys[i] = Convert.ToByte(sKey.Substring(i * 2, 2), 16);                }


本文抄自:http://www.cnblogs.com/yetiea/articles/3858669.html
原创粉丝点击