对AES密码版本感到困惑

时间:2014-08-16 23:51:01

标签: java android encryption cryptography aes

我试图在Android应用中实施AES256加密。数据来自加密的服务器,我一直在使用Android库JNCryptor来解密数据。它成功地做到了这一点,但它很慢。我想尝试Facebook的Conceal库,因为它报告加密和解密速度更快。我的第一个实现是使用Conceal库从服务器解密字符串。当我尝试将加密字符串的byte[]传递给隐藏中的decrypt函数时出现问题。

ByteArrayInputStream bin = new ByteArrayInputStream(Base64.decode(encStr, Base64.DEFAULT));
    InputStream cryptoStream = null;
    try {
        cryptoStream = crypto.getCipherInputStream(bin, new Entity("test"));
...

崩溃的原因是,通过获取cipher version的第一个字节而找到的给定byte []不等于预期的隐含cipher version数字1。

然后我查看了Conceal的加密方面,看到这只是加密过程中设置的数字。

仔细检查我然后查看了JNCryptor源代码并看到它设置并查找Cipher版本号2和3。

我想我的问题是:Cipher版本号的重要性是什么?我能够让Conceal库解密这些数据,还是只是以完全不同的方式加密?

1 个答案:

答案 0 :(得分:2)

他们是完全无关的。例如,Conceal似乎使用GCM加密模式(包括身份验证),RNCrypt在CBC模式下使用AES,在HMAC中使用AES进行身份验证。除此之外,它直接使用密码和PBKDF2代替键(尽管像JNCryptor这样的实现可能包含直接使用键的快捷方式 - 感谢Duncan)。

两者都是相对简约的专有加密格式,都使用AES。那是他比较结束的地方。