- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写的程序必须与基于 PHP 的 Web 服务交换加密数据。我使用带有 OpenSSL 的 C++ 在 CBC 模式下使用 AES-128 加密数据。我将 base64 编码的数据(IV 和密文)发送到 HTTP 服务器,PHP 必须使用 Mcrypt 解密数据。然而,只有第一个 block 被解密成功,其他 block 变成垃圾。我完全不明白:我们如何才能仅在 CBC 模式下解密第一个 block ?如果IV、 key 或 key 大小/ block 大小/轮数等算法设置错误,我们将无法收到正确解密的第一个 block ;如果解密参数没问题,怎么可能其他 block 没有解密呢?当我用 OpenSSL/C++ 解密 PHP 无法解密的相同密文时,解密成功。 PHP也是一样:我可以用CBC方式加密解密数据。但出于任何原因,OpenSSL EVP_aes_128_cbc 和 mcrypt 'rijndael-128' 不兼容。我的解密代码如下:
$chipher = mcrypt_module_open('rijndael-128', '', 'cbc', '');
mcrypt_generic_init($chipher, $key, $iv);
$decrypted_data = mdecrypt_generic($chipher, $encrypted_data);
是mcrypt的错误还是有什么方法可以用OpenSSL AES-128-CBC加密数据并用PHP mcrypt解密?
最佳答案
嗯,错误出在 C++ 方面。我加密的数据是分段的,所以我不得不多次调用 EVP_CipherUpdate;因为在重复调用 EVP_CipherUpdate 时复制到输出缓冲区的数据太多,而且只有最后一个 block ,所以我不得不重复调用 EVP_CipherInit_ex 来清理 OpenSSL 上下文中的内部缓冲区。当我调用 EVP_CipherInit_ex 时,它重置了 IV,所以在某个点之后解密变得不可能。解决方案是在每次 EVP_CipherUpdate 调用后将最后版本的 IV(context.iv 指向最后一个 IV,context.oiv 指向原始版本)保存在缓冲区中,并将其传递给 EVP_CipherInit_ex 以允许 OpenSSL 对数据进行分段加密。当我这样做时,mcrypt 能够解密整个数据甚至删除填充。所以,mcrypt 非常好,我看到的问题是我的程序错误,而不是 mcrypt。
关于php - 使用 OpenSSL/C++ 和 PHP/Mcrypt : the 1st block is decrypted only 的 AES-128-CBC 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20146808/
我已经在 nodejs 中重新实现了这个 AES c++ 解密。 “缓冲区”包含加密内容。“decryptKey”包含解密“缓冲区”的 key 。“expectedOutput”包含预期的输出。 为了
我正在尝试解密从后端服务器接收到的字符串 "~9?8?m???=?T?G",该服务器使用 OpenSSL 加密字符串,使用AES-256-CBC。有代码块: public static String
输入图像是被分解为64像素块的灰度图像,加密函数采用64像素(512位)作为输入值和64位密钥。我们将INPUT_VALUE分成8个像素值的块。我们对一组8个像素进行16轮加密。其他每个函数都进行一些
输入图像是被分解为64像素块的灰度图像,加密函数采用64像素(512位)作为输入值和64位密钥。我们将INPUT_VALUE分成8个像素值的块。我们对一组8个像素进行16轮加密。其他每个函数都进行一些
目前我正在使用 PyPDF 2,我也尝试将 PyPDF 4 作为依赖项。 我遇到了一些加密文件并像往常一样处理它们(在以下代码中): import PyPDF2 import PyPDF4 pdfFi
我需要解密 JavaScript 中的十六进制消息,其结果与用 Java 编写的代码完全相同。然而,使用 CryptoJs 的 Javascript 版本返回一个空结果 Java中的代码: priva
我正在设计一个使用加密的匿名聊天网站。我应该在客户端解密消息还是在服务器端解密消息?哪种方法更安全?我使用Node.js + Socket.io来开发聊天系统。 例如: 用户A加密消息,将加密消息发送
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: How come MD5 hash values are not reversible? 我正在阅读一个关于 MD5
因此,我使用以下代码成功将密码加密为密码哈希: class PassHash { // blowfish private static $algo = '$2a'; // co
我不确定,但我认为我的问题是我的函数没有比较字符的正确性。我使用 Switch 也是对的吗? 我的输入 x 是一个字符串,当 x = "aaaaa"时它返回 "aaaaa"而不是 "zzzzz"。 S
我很难逆转这个算法: decrypt_algorithm = function (text) { var parser = new TextParser(text); var decrypt_
我正在编写一个程序,它接受来自控制台的输入 - 一个 zip 文件的名称,一个包含从第一个 zip 生成的(de/en)加密文件的 zip 文件的名称和一个包含公钥。解密时出现异常: exceptio
我正在使用回溯来打印应用程序的堆栈跟踪,我得到类似的东西 libQtCore.so.4(_ZN11QMetaObject8activateEP7QObjectPKS_iPPv+0x843) [0x7f
为什么 Pycrypto AES 解密在使用用于加密的 AES 对象解密时给出不同的输出,而在使用仅用于解密的 AES 对象解密时给出正确的输出? from Crypto.Cipher import
在以下代码中:symmetryCryptoKey 表示应始终受到保护的私有(private)信息,因为它是加密对称 key 的解密版本。 问题: 是否可以进行其他增强来保护 Multi-Tenancy
我正在开展一个项目,部分要求: 添加一个复选框菜单项 Decrypt,可以选中该选项进行解密,也可以取消选中该选项进行加密。该项目应与 GUI 中的切换按钮相关联。两者都应反射(reflect)应用程
我在 ColdFusion 中有一个函数可以加密和解密密码。我需要有人查看该函数并指出我或给我写一个 c# 等效项。一个项目尽快需要它,所以如果你能帮忙的话,我可以通过 paypal 给你一些现金。
我目前正在编写一个非常小的Java程序来实现一次性pad,其中pad(或 key )本身是使用SecureRandom对象生成为一系列字节的,该对象使用一个简单的字符串进行播种SHA-512 算法。
这是我在运行编码和解码类时遇到的错误。 javax.crypto.BadPaddingException: Decryption error at sun.security.rsa.RSAPa
我正在尝试在我的客户端和服务器之间实现基于 RSA 的加密通信。为此,我通过以下方式使用 openssl 生成了 RSA 公钥和私钥: openssl genrsa -out private.pem
我是一名优秀的程序员,十分优秀!