首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP解密加密字符串

用PHP解密加密字符串
EN

Stack Overflow用户
提问于 2022-09-20 13:18:10
回答 1查看 36关注 0票数 1

我用crypto-jsreact中一个一个地加密了多个字符串。

我用的加密-

代码语言:javascript
复制
encryptAES = (text, key) => {
    return CryptoJS.AES.encrypt(text, key).toString();
};

为了解密,我使用了如下功能-

代码语言:javascript
复制
decryptAES = (encryptedBase64, key) => {
    const decrypted = CryptoJS.AES.decrypt(encryptedBase64, key);
    if (decrypted) {
      try {
        console.log(decrypted);
        const str = decrypted.toString(CryptoJS.enc.Utf8);
        if (str.length > 0) {
          return str;
        } else {
          return 'error 1';
        } 
      } catch (e) {
        return 'error 2';
      }
    }
    return 'error 3';
  };

我已经上传了这个加解密这里的工作示例项目。

例如,如果我用密钥“地球”加密“我生活在印度”,它将输出为- "U2FsdGVkX1+cBvU9yH5fIGVmliJYPXsv4AIosUGH4tA=",,类似地,它将成功地用正确的密钥解密。

现在,我在我的数据库中存储了多个加密字符串,但现在需要它们存储未加密的字符串,所以我想用对它们进行解密。我可以使用上面提到的函数在js中解密它们,但是我无法弄清楚如何在PHP中这样做。我已经尝试过 github存储库,但是我无法为我的用例定制它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-20 15:35:41

要解密,首先必须确定盐和密文。为此,必须对CryptoJS代码的加密数据进行Base64解码。salt是Base64解码数据的第二个8个字节,后面是实际的密文(前8个字节是Salted__的ASCII编码,可以忽略)。

确定盐后,用EVP_BytesToKey()求出key和IV。您可以在web上找到各种PHP实现,例如这里。注意,CryptoJS使用MD5作为摘要,因此必须相应地修改链接代码中的摘要。

一旦确定了密钥和IV,就可以解密实际的密文。

合在一起:

代码语言:javascript
复制
<?php
// Separate salt and actual ciphertext
$ctOpenSSL = base64_decode("U2FsdGVkX1+cBvU9yH5fIGVmliJYPXsv4AIosUGH4tA=");
$salt = substr($ctOpenSSL, 8, 8);
$ciphertext = substr($ctOpenSSL, 16);

// Derive key and IV
$keyIv = EVP_BytesToKey($salt, "earth");
$key = substr($keyIv, 0, 32);
$iv = substr($keyIv, 32, 16);

// Decrypt
$decrypted = openssl_decrypt($ciphertext, "aes-256-cbc", $key, OPENSSL_RAW_DATA, $iv);
print($decrypted . PHP_EOL); // I live in India

function EVP_BytesToKey($salt, $password) {
    $bytes = '';
    $last = '';
    while(strlen($bytes) < 48) {
        $last = hash('md5', $last . $password . $salt, true);
        $bytes.= $last;
    }
    return $bytes;
} 
?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73787380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档