gpt4 book ai didi

java - 对 AES 密码版本感到困惑

转载 作者:行者123 更新时间:2023-12-02 05:33:00 25 4
gpt4 key购买 nike

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

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

崩溃是因为给定的密码版本(通过获取byte []的第一个字节找到的)不等于预期的Conceal 密码版本 数字 1。

然后我查看了 Conceal 的加密部分,发现这只是加密过程中设置的一个数字。

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

我想我的问题是:密码版本号的意义是什么?我能否让 Conceal 库解密这些数据,或者它们只是以完全不同的方式加密?

最佳答案

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

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

关于java - 对 AES 密码版本感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25345075/

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