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);
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"));
}
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;
}
}
{
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
- C#与JAVA的DES加密结果一致的参数设置
- JAVA 与C# 的AES的加密函数、解密函数,加密解密结果一致
- Des加密(js+java结果一致)
- php实现和c#一致的DES加密解密
- php和c#一致的DES加密解密算法类
- OC的DES加密,使与java的Cipher类用DES/CBC/PKCS5Padding方式的加密结果相同
- Java和C#中3DES的加密与解密
- iOS、后台、Android 三个一致的加密工具 ---------DES加密
- crypto-js des加密与解密 与java运行结果不一致的问题
- 使用C# DES解密java DES加密的字符串
- 使用C# DES解密java DES加密的字符串
- php实现和c#一致的DES加密解密 (php中调用方法)
- C#用DES加密JAVA用DES解密,JAVA用DES加密C#用DES解密的实现
- asp 与 C#结果一致的base64编码
- des加密中c的算法和java算法一致的实现
- java的des加密
- java的des加密
- Java与.NET的DES加密
- Java学习--day6
- Vue简介
- 基于AngularJs 省市区联动实践
- Redis的字典与ConcurrentHashMap的扩容策略比较
- io流基础认知
- C#与JAVA的DES加密结果一致的参数设置
- Nginx mogilefs module (v 1.0.4)文档
- Python 对dict 的 keys() 排序
- SQLite数据库的一些应用(应用单例模式)
- 深入浅出数据仓库中SQL性能优化之Hive篇
- 【Timer】定时器使用示例
- WiFi信号扩展的最佳方案
- USB OTG
- Nodejs Express下引入本地文件的问题