java des加密结果不一样_C#和Java DES加密值不相同

本文探讨了在C#和Java中使用DES加密算法时遇到的问题。当输入数据超过7个字节时,两种语言产生的加密结果不同。文章提供了具体的示例代码及加密输出结果,以帮助理解这一现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我试图在C#和Java中加密相同的数据。 如果数据超过7个字节,则Java和C#加密值不相同。输入1: a

java输出: FrOzOp / 2Io8 =

C#输出: FrOzOp / 2Io8 =

输入2: abc

j: H9A / ah18K7I =

c#: H9A / ahl8K7I =

输入3: aaaaaaaa ( 问题 )

j: Gxl7e0aWPd7j6l7uIEuMxA ==

c#: Gxl7e0aWPd7sf1xR6hK4VQ ==

这是C#和Java方法的实现。

C#代码:public String saltTxt = "12345678";

public String Encrypt(String txt)

{

byte[] data = Encrypt(Encoding.UTF8.GetBytes(txt));

DESCryptoServiceProvider alg = new DESCryptoServiceProvider();

alg.Key = Encoding.UTF8.GetBytes(saltTxt.ToCharArray(), 0, cprovider.KeySize / 8);

alg.IV = new byte[8];

MemoryStream ms = new MemoryStream();

CryptoStream stem = new CryptoStream( ms, cprovider.CreateEncryptor(),CryptoStreamMode.Write);

stem.Write(txt, 0, txt.Length);

stem.FlushFinalBlock();

data = ms.ToArray();

return Convert.ToBase64String(data);

}

Java代码:public String saltTxt = "12345678";

public String Encrypt(String str) {

try {

KeySpec myKey = new DESKeySpec(saltTxt.getBytes("UTF8"));

SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(myKey);

Cipher ecipher = Cipher.getInstance("DES");

ecipher.init(Cipher.ENCRYPT_MODE, key);

byte[] data = str.getBytes("UTF8");

byte[] crypt = ecipher.doFinal(data);

return new BASE64Encoder().encode(crypt);

} catch (Exception ex) {

}

return null;

}

知道为什么它不按预期工作吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值