最近在做接口的加密,发现jsp发过来的3DES加密字节和我这边aspx加密的对不上,方法如下:.net方法:
public static byte[] Encrypt3Des(byte[] bytes, string aStrKey)
{
var des = new TripleDESCryptoServiceProvider();
des.Key = Encoding.UTF8.GetBytes(aStrKey);
des.Mode = CipherMode.ECB;
des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ICryptoTransform desEncrypt = des.CreateEncryptor();
return desEncrypt.TransformFinalBlock(bytes, 0, bytes.Length);
}java方法:
public static byte[] encryptRes(byte[] data, String keyStr) {
SecretKey key = getSecretKey(keyStr);
// 定义加密算法,可用DES,DESede,Blowfish
String Algorithm = "DESede";
// 加密随机数生成器(RNG),(可以不写)
SecureRandom sr = new SecureRandom();
// 定义要生成的密文
byte[] cipherByte = null;
try {
// 得到加密/解密器
Cipher c1 = Cipher.getInstance(Algorithm);
// 用指定的密钥和模式初始化Cipher对象
// 参数:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)
c1.init(Cipher.ENCRYPT_MODE, key, sr);
// 对要加密的内容进行编码处理
cipherByte = c1.doFinal(data);
} catch (Exception e) {
// TODO: handle exception
}最终发现大家字节对不上,以字符“a”为例:
对方-3DES加密:
{56,48,201,9,133,86,35,241,}
我方-3DES加密:
{51,170,200,140,195,183,16,25,}
我的能成功解密为字节{97},但是不能解密对方的字节高手请教,求救命~~~~~~~~~~~~~~~~~~~~~·
public static byte[] Encrypt3Des(byte[] bytes, string aStrKey)
{
var des = new TripleDESCryptoServiceProvider();
des.Key = Encoding.UTF8.GetBytes(aStrKey);
des.Mode = CipherMode.ECB;
des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ICryptoTransform desEncrypt = des.CreateEncryptor();
return desEncrypt.TransformFinalBlock(bytes, 0, bytes.Length);
}java方法:
public static byte[] encryptRes(byte[] data, String keyStr) {
SecretKey key = getSecretKey(keyStr);
// 定义加密算法,可用DES,DESede,Blowfish
String Algorithm = "DESede";
// 加密随机数生成器(RNG),(可以不写)
SecureRandom sr = new SecureRandom();
// 定义要生成的密文
byte[] cipherByte = null;
try {
// 得到加密/解密器
Cipher c1 = Cipher.getInstance(Algorithm);
// 用指定的密钥和模式初始化Cipher对象
// 参数:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)
c1.init(Cipher.ENCRYPT_MODE, key, sr);
// 对要加密的内容进行编码处理
cipherByte = c1.doFinal(data);
} catch (Exception e) {
// TODO: handle exception
}最终发现大家字节对不上,以字符“a”为例:
对方-3DES加密:
{56,48,201,9,133,86,35,241,}
我方-3DES加密:
{51,170,200,140,195,183,16,25,}
我的能成功解密为字节{97},但是不能解密对方的字节高手请教,求救命~~~~~~~~~~~~~~~~~~~~~·
解决方案 »
- 求救,C# 内存只增加,不减少,最后报内存不足
- C#连接问题
- 两个 datatable 如何合并
- 该如何避免在datagridview中的Add事件触发了selectedChanged事件
- 水晶报表通过调用存储过程时点“打印”与“导出”按钮就没显示了.
- OleDB oledb = new OleDB(); 这句要引用什么命名空间?
- XX信息管理系统的数据库怎么设计比较好?
- 我有个C#的管理系统,在VS2005上运行就出现问题,请那位高手帮忙看看,指点下。感激不尽^_^(我的E.mail:[email protected])
- 如何反射C#写的DLL
- 扩展方法
- C#怎么实现两个EXCEL之间的数据对比?
- C#32位程序在64位系统下操作注册表失败!!
{
var des = new TripleDESCryptoServiceProvider();
des.Key = Encoding.UTF8.GetBytes(aStrKey);
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.PKCS7;
ICryptoTransform desDecrypt = des.CreateDecryptor();
return desDecrypt.TransformFinalBlock(bytes, 0, bytes.Length);
}
没有明确显示key的获取方式,必须看到getSecretKey的方法内容。或者你也可以尝试修改.NET中的这行:des.Key = Encoding.UTF8.GetBytes(aStrKey);
改为Encoding.Defalut.GetBytes(aStrKey);问题应该是这个密钥字符串到byte[]转换的编码上,多试几种,应该能成功。