【发布时间】:2010-10-28 10:13:08
【问题描述】:
我在 java 中使用 AES/CBC/PKCS5Padding 密码实例进行 AES 加密和解密 如何在java中使用上面加密的黑莓解密数据。
使用黑莓通过 AES/CBC/PKCS5Padding 解密数据
谢谢 粑粑
【问题讨论】:
标签: java blackberry encryption
我在 java 中使用 AES/CBC/PKCS5Padding 密码实例进行 AES 加密和解密 如何在java中使用上面加密的黑莓解密数据。
使用黑莓通过 AES/CBC/PKCS5Padding 解密数据
谢谢 粑粑
【问题讨论】:
标签: java blackberry encryption
我建议使用 BlackBerry API(Bouncy Castle 可以,但为什么要复杂化呢?)。
使用 net.rim.crypto 包 - 您使用的是全对称加密,因此您只需要标准的 RIM signing keys 在设备上运行(20 美元和 2-3 天即可获得) - 同时您可以用模拟器做任何事情。
基本上,您需要创建一个包装 CBCDecryptorEngine 的 PKCS5UnformatterEngine,该 CBCDecryptorEngine 包装一个 AESDecryptorEngine。可能将所有内容都包装在 BlockDecryptor 中,这样您就可以像在 InputStream 中一样对待它。类似的东西(自从我这样做以来已经有一段时间了,所以它可能无法 100% 工作):
InputStream encryptedInput; // if you have a byte[] of data, use a ByteArrayInputStream
AESKey key = new AESKey(<your key data as a byte[]>)
InitializationVector iv = new InitializationVector(<your iv data as a byte[]>) // of course you need to know your IV since you're doing CBC encryption
BlockDecryptor decryptor = new BlockDecryptor(
new PKCS5UnformatterEngine(
new CBCDecryptorEngine(
new AESDecryptorEngine(key),
iv
)
)
);
// then decryptor acts as an InputStream which gives you your decrypted, unpacked data
decryptor.read(buffer); // buffer will contain decrypted, unpacked data
【讨论】:
Bouncy castle 有一个很棒的图书馆可以做到这一点。主要问题是如何以安全的方式获取密钥。我发现 .NET 和 Java 以不兼容的方式序列化密钥,所以我最终在双方都使用了 Bouncy Castle 以促进密钥传输,因为它是使用 RSA 传输的,为了安全起见。
【讨论】:
我认为Bouncy Castle Library 支持这一点。他们也提供了一些简短的教程。
【讨论】: