您的位置:首页 > 编程语言 > Java开发

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

2017-09-01 18:49 585 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: