gpt4 book ai didi

java - AES 加密在黑莓中添加垃圾字符

转载 作者:行者123 更新时间:2023-12-04 04:48:12 25 4
gpt4 key购买 nike

我有一个问题。在我的应用程序中,我使用 AES 加密和解密。当我加密数据并将其发送到服务器端时,它显示一些添加到加密数据中的垃圾字符。但是如何?

其实这个加密的数据我这边是完美解密的,但是服务器收到的时候有垃圾字符。

这是我的加密代码:

public static  byte[] encrypt( byte[] keyData, byte[] data )
throws CryptoException, IOException
{
// Create the AES key to use for encrypting the data.
// This will create an AES key using as much of the keyData
// as possible.

AESKey key = new AESKey( keyData );

// Now, we want to encrypt the data.
// First, create the encryptor engine that we use for the actual
// encrypting of the data.
AESEncryptorEngine engine = new AESEncryptorEngine( key );

// Since we cannot guarantee that the data will be of an equal block
// length we want to use a padding engine (PKCS5 in this case).
PKCS5FormatterEngine fengine = new PKCS5FormatterEngine( engine );

// Create a BlockEncryptor to hide the engine details away.
ByteArrayOutputStream output = new ByteArrayOutputStream();
BlockEncryptor encryptor = new BlockEncryptor( fengine, output );

encryptor.write( data );

encryptor.close();
output.close();

return output.toByteArray();
}

请注意,我无权访问服务器上的解密逻辑。

最佳答案

我并不完全清楚您是在服务器端解密,还是仅仅因为字节数比原始数据多而将它们称为垃圾字符。如果它总是添加 16 个或更少字节,那么这就是 PKCS5 填充,用于使您的数据可被密码的块大小整除。解密后不可见,因为解密器会自动剥离pad。

但是,查看 Blackberry 文档我建议您更改加密,因为 BlockEncryptor 默认为 ECB 模式。这是一个 mode of operation这很容易泄漏有关明文的信息。相反,选择 BlockEncryptor 的子类,例如 CBCEncryptorEngine .您需要将 IV 与密文一起传输,以便稍后在此模型中解密。

使用 Blackberry 提供的结构实现加密时要非常非常小心。很容易出错(例如使用 ECB),并且生成的密文可能看起来不错,但从根本上被破坏了。

关于java - AES 加密在黑莓中添加垃圾字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17858486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com