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
相关文章推荐
- OC的DES加密,使与java的Cipher类用DES/CBC/PKCS5Padding方式的加密结果同样
- java中DES加密(DES/ECB/pkcs5padding)的代码分享
- OC的DES加密,使与java的Cipher类用DES/CBC/PKCS5Padding方式的加密结果相同
- PHP对接java的AES/ECB/PKCS5Padding加密方式
- java加密之AES/ECB/PKCS5Padding
- java/php对应的AES/CBC/PKCS5Padding模式 加密解密
- C#用DES加密JAVA用DES解密,JAVA用DES加密C#用DES解密的实现
- AES - 关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题
- 【转】用 Java 解密 C# 加密的数据(DES)
- objective-c java C# 3DES ECB 加密
- 用Java进行AES256-ECB-PKCS7Padding加密
- node.js AES/ECB/PKCS5Padding 与其他语言的加密解密通用
- AES Java加密 C#解密 (128-ECB加密模式)
- AES/ECB/PKCS5Padding/PKCS7Padding 128位密钥(带密钥补位功能)加密解密
- golang中DES/ECB/PKCS5Padding的实现
- C# DES (ECB模式) 加密解密 --单倍长
- C#用DES加密JAVA用DES解密,JAVA用DES加密C#用DES解密的实现
- JAVA AES加密 对应的 C# 方法
- Asp.Net C#中除了MD5加密之外还经常用到了AES加密、解密与DES加密、解密,本次先介绍DES的加密及解密。注意的是DES的密匙是8位的。
- 用 Java 解密 C# 加密的数据(DES)