【问题标题】:How to decrypt this string using openssl如何使用 openssl 解密此字符串
【发布时间】:2020-06-19 18:39:03
【问题描述】:

我在解密使用 openssl 加密的字符串时遇到了一些问题。我无权更改加密代码,但我有读取权限:

加密代码(无法修改)

<?php 
$key = hex2bin("24a5d2b96b9aee2fb515c94fb36da508");
$encryptTxt = openssl_encrypt(
    "txt to encrypt",
    'AES-128-ECB',
    $key
);
?>

<a href="decrypt.php?un=<?php echo bin2hex(base64_decode($encryptTxt)) ?>">link</a>

这是我尝试解密的方式:

decrypt.php


$ciphertext = $_GET['un'];

$cipher = "aes-128-ecb";
$key = hex2bin("24a5d2b96b9aee2fb515c94fb36da508");

$original_plaintext = openssl_decrypt($ciphertext, $cipher, $key);
echo "text= " . $original_plaintext;

解密页面不返回解密后的文本

【问题讨论】:

  • 为我工作。听起来 WSOD 掩盖了实际错误。 stackoverflow.com/questions/845021/…
  • ECB 也是一种非常糟糕的密码模式。请参阅此 wiki 部分底部的图片:en.wikipedia.org/wiki/…
  • @Sammitch 当您说它对您有用时,您的意思是它实际解密还是您看到错误?如果需要,我会看看我的错误报告是否需要一些调整
  • @Sammitch 回复:欧洲央行,我听到了,感谢您提供的链接 - 很好的视觉方式来了解正在发生的事情。幸运的是,传递的数据并不敏感,这更像是我正在处理的表面情况

标签: php encryption openssl


【解决方案1】:

已解决:我将decrypt.php 更新为以下内容,它返回了解密后的文本

$ciphertext = $_GET['un'];
$ciphertext = hex2bin($ciphertext);
$ciphertext = base64_encode($ciphertext);

$cipher = "aes-128-ecb";
$key = hex2bin("24a5d2b96b9aee2fb515c94fb36da508");

$original_plaintext = openssl_decrypt($ciphertext, $cipher, $key);
echo "text= " . $original_plaintext;

【讨论】:

  • 啊,我以为是加密的问题,我什至没有看到编码。如果您将 OPENSSL_RAW_DATA 作为第四个参数传递给加密/解密,您可以跳过 base64 编码/解码步骤。
猜你喜欢
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2019-04-18
  • 2017-07-05
  • 2010-11-12
  • 2013-06-11
  • 1970-01-01
相关资源
最近更新 更多