为什么C#和java都使用DES加密,但是加密的结果不一样?

C#代码:publicstaticstringEncrypt(stringpToEncrypt,stringsKey){DESCryptoServiceProviderp... C#代码:
public static string Encrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
byte[] bytes = Encoding.GetEncoding("GBK").GetBytes(pToEncrypt);
provider.Key = Encoding.ASCII.GetBytes(sKey);
provider.IV = Encoding.ASCII.GetBytes(sKey);
MemoryStream stream = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);
stream2.Write(bytes, 0, bytes.Length);
stream2.FlushFinalBlock();
StringBuilder builder = new StringBuilder();
foreach (byte num in stream.ToArray()) {
builder.AppendFormat("{0:X2}", num);
}

return builder.ToString();
}
java代码:
public static String encrypt(String message,String encoding) throws Exception {
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(encoding));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(key.getBytes(encoding));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] buf = cipher.doFinal(message.getBytes(encoding));
String a = toHexString(buf).toUpperCase();
return a;
}
密钥是83569356。
public static String toHexString(byte b[]) {
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String plainText = Integer.toHexString(0xff & b[i]);
if (plainText.length() < 2)
plainText = "0" + plainText;
hexString.append(plainText);
}
return hexString.toString();
}
展开
 我来答
Sephil
2014-06-01 · 知道合伙人IT服务行家
Sephil
知道合伙人IT服务行家
采纳数:616 获赞数:1036
熟悉常用语言和数据库,爱写代码

向TA提问 私信TA
展开全部
1.注意取字符串bytes是编码保持一致,不如都用Unicode
2.key和Iv保持一致
3.加密模式和填充方式保持一致
比如C#里
algo.Mode=CipherMode.ECB;
algo.Padding=PaddingMode.None;
则java里对应的为
final Cipher algo=Cipher.getInstance("DES/ECB/NoPadding");
追问
C#是别人写的,我不能改。我只能改java代码。我应该怎改呢?
追答
没什么大问题,把你的encoding参数改称"ASCII"结果就一样了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式