我正试图在安卓应用程序中实现AES256加密。数据来自加密的服务器,我一直在使用Android库JNCryptor对数据进行解密。它成功地做到了这一点,但速度非常慢。我想试试Facebook的隐匿库,因为它报告的加密和解密速度更快。我的第一个实现是用隐藏库从服务器解密一个字符串。当我试图将加密字符串的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。
然后我查看了隐藏的加密部分,并看到这只是加密过程中设置的一个数字。
为了再次检查,我查看了JNCryptor源代码,看到它设置并查找密码版本号2和3。
我想我的问题是:密码版本号的意义是什么?我是否能够让隐藏库解密这些数据,或者它们只是以完全不同的方式加密?
发布于 2014-08-17 00:32:09
他们完全不相关。例如,隐藏似乎使用GCM加密模式(包括身份验证),RNCrypt在CBC模式中使用AES,而HMAC用于身份验证。此外,它使用密码和PBKDF2,而不是直接使用密钥(尽管像JNCryptor这样的实现可能包括直接使用密钥的快捷方式--谢谢邓肯)。
两者都是相对极简的专有加密格式,而且都使用AES。这就是他比较的终点。
https://stackoverflow.com/questions/25345075
复制相似问题