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

我试图在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;

}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DES(Data Encryption Standard)是一种对称加密算法,用于保护计算机和网络中的数据安全。DES算法使用相同的密钥进行加密和解密操作。 首先,我们来讨论DES加密过程。在加密过程中,原始数据会被分成64位的数据块,并经过一系列复杂的置换、替代和混合等步骤,最终生成一个64位的密文数据块。加密过程中所使用的密钥也是64位的,通过子密钥的生成和迭代,将密钥与数据进行混合运算,从而实现加密操作。DES算法的强度在于它的迭代次数,通常会进行16轮迭代来确保数据的安全性。 接下来,我们来探讨DES的解密过程。在解密过程中,密文数据块会经过与加密过程相反的步骤,通过逆向置换、逆向替代和逆向混合等步骤,最终还原为原始的64位明文数据块。与加密过程类似,解密过程中使用的密钥也是相同的。通过迭代生成的子密钥,将密钥与密文数据块进行反向混合运算,实现解密操作。解密过程同样进行16轮迭代,以确保数据的正确性和完整性。 总之,DES算法是一种使用相同密钥进行加密和解密的对称加密算法。加密过程将原始数据分成64位数据块,并通过一系列复杂的步骤生成相应的密文数据块。解密过程则是将密文数据块经过相反的操作还原为原始的明文数据块。DES算法可以保护数据的机密性和安全性,广泛应用于计算机和网络领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值