当前位置: 首页 > 知识库问答 >
问题:

如何AES CBC使用pidCrypt加密,然后使用phpseclib解密?

傅峰
2023-03-14

我需要使用脚本(pidCrypt AES CBC)加密短字符串,然后使用PHP解密它(phpseclib Crypt_AES CBC)。

各种库之间有太多的不兼容(尝试了很多,有些我甚至因为缺少文档而无法开始使用),以至于我无法理解和克服它们(当前的“标准”只是不包括调试,胡言乱语或简单的<code>false</code>将返回错误的用法)。

通用加密系统CBC表示,它使用的是与开放SSL兼容的编码。

到目前为止,我无法理解为什么pidCrypt的输出不会在phpseclib中解密:

PidCrypt

var aes=new pidCrypt.AES.CBC();
aes.encryptText("abcdefg", "secret", {nBits: 128});

console.log(aes.pidcrypt.getParams());
/**
A0_PAD: true
UTF8: true
blockSize: 16
clear: true
dataIn: "abcdefg"
dataOut: "U2FsdGVkX19p8dJctoZSgamat+UBHMWM/Zx64fBDYJY="
decryptIn: ""
decryptOut: ""
encryptIn: Array[16]
encryptOut: "©·åÅýzáðC`"
iv: "e314f8ebbcc5a1e0ae6c27033dd6725f"
key: "49f9bd99b7952b68b3bfa47404455fa7"
nBits: 128
salt: "69f1d25cb6865281"
*/

phpseclib

function hex2raw($strHexString)
{
    $strRawBytes="";
    $arrChunks=str_split($strHexString, 2);
    for($i=0; $i<count($arrChunks); $i++)
        $strRawBytes.=chr(hexdec($arrChunks[$i]));
    return $strRawBytes;
}

require_once("Crypt/AES.php");

$aes=new Crypt_AES(CRYPT_AES_MODE_CBC);

$aes->setPassword("secret");
$aes->setIV(hex2raw("e314f8ebbcc5a1e0ae6c27033dd6725f"));

var_export($aes->decrypt(base64_decode("U2FsdGVkX19p8dJctoZSgamat+UBHMWM/Zx64fBDYJY=")));
/**
false
*/

我还尝试了phpseclib AES CBC模式“密钥推导:无”示例(setKey和setIV而不是setPassword),结果相同。

如何让phpseclib解码上述pidCrypt AES CBC输出?

或者

是否有phpseclib的替代品可以解密上述pidCrypt输出(具有代码API;不允许使用OpenSSL示例)?

请不要讲授Javascript安全和网络安全。这不是为了防止互联网/网络嗅探。

暂时还没有答案

 类似资料:
  • 问题内容: 我正在使用ExtJS框架。我在 JavaScript中 有MD5函数来加密某些JSON。我的后端使用Java,所以我想知道如何使用 Java 解密MD5 Javascript加密? 这是我正在使用的MD5函数的JS等效项: 问题答案: MD5是 哈希 (即单向转换),因此您无法对其进行解密。您可以将已知哈希与从明文计算出的哈希进行比较,以验证输入的有效性。Java已经为此内置了库。我在

  • ===编辑=== 作为对注释的回答,no,这两个实现似乎不计算相同的加密数据,给定相同的密钥和civ值。呼叫 产生一个完全不同的加密字符串,即使考虑到CIV对加密文本的预置,它仍然比delphi端的输出长8个字节。 再次感谢。

  • 我需要在iPhone或iPad上加密字符串(实际上是XML文件),然后用.NET应用程序解密。感谢David Veksler在这里提出的问题“.NET和iPhone之间的AES互操作性?”,以及在这里发表的博客文章http://automagical.rationalmind.net/2009/02/12/aes-interoperability-between-net-and-iPhone/。

  • 问题内容: 我编写的使用3DES在Java中对字符串进行编码的每种方法都无法解密回原始字符串。是否有人有一个简单的代码片段,可以对字符串进行编码,然后再将其解码回原始字符串? 我知道我在此代码中的某个地方犯了一个非常愚蠢的错误。到目前为止,这是我一直在努力的工作: 注意,我不是从crypto方法返回BASE64文本,也不是在解密方法中不是对base64进行未编码的,因为我试图查看我是否在BASE6

  • 我的代码如下: 有人来帮我吗

  • 我目前正在研究在浏览器中加密和播放加密视频的主题。在使用Widevine时,我已经在castlabs的DRMToday和Shaka播放器上取得了一些成功。 现在,我正在尝试使用ClearKey在没有外部服务的情况下加密视频,并在Chrome中播放(使用任何可以处理的js播放器)。 我确实使用MP4Box加密了单个mp4文件(mse eme用于创建加密配置),但我不知道如何在浏览器中播放它。HTML