mcrypt java_使用openssl解密mcrypt

在尝试将代码从mcrypt升级到openssl时,遇到解密已使用mcrypt加密(rijndael-128 cbc,32字节密钥)的数据的挑战。虽然手动填充数据并使用openssl解密可以成功,但已加密的数据存储在数据库中,无法直接修改。目前的问题是如何在不修改原始数据的情况下,使用openssl正确解密。
摘要由CSDN通过智能技术生成

由于mcrypt被认为是过时的,我的任务是升级当前代码以使用openssl . 听起来很简单,但......经过几天的尝试和失败后,我觉得自己很疯狂 .

我的问题是:你有什么方法可以用之前用mcrypt加密的openssl数据解密吗?我已经阅读了很多这方面的帖子,大多数人都说在运行mcrypt之前需要先前手动填充数据 . 问题是mcrypt-ed数据已经加密(使用mcrypt提供的自动空填充)并驻留在数据库中,因此无法和/或期望对其进行修改 .

Mentions:

使用的算法是rijndael-128 cbc,带有32字节密钥(所以我使用aes-256-cbc for openssl) .

我正在使用php(php-crypto)的openssl包装器 .

我设法使逆操作工作(用mcrypt解码openssl),只需剥离最终解码的字符(如果它们是非字母数字) .

在mcrypting之前手动填充数据然后使用openssl解密它就像魅力一样,但这不是问题所在 .

Some code snippets:

// Simple mcrypt encrypt, decrypt with php-crypto example

// This doesn't work and produces a "Finalizing of cipher failed" error

$data = "This is a text";

$strMcryptData=mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);

$algorithm = 'aes-256-cbc';

$cipher = new Cipher($algorithm);

$sim_text = $cipher->decrypt($strMcryptData, $key, $iv);

// Simple mcrypt encrypt with padding, decrypt with php-crypto

// Works and produces the correct text on decryption

$pad = $blocksize - (strlen($data) % $blocksize);

$text = $data;

$text .= str_repeat(chr($pad), $pad);

$strPaddedData=mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);

$sim_text = $cipher->decrypt($strPaddedData, $key, $iv);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值