gpt4 book ai didi

PHP 加密数据,Bash 解密

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:03:47 24 4
gpt4 key购买 nike

我正在尝试想出一种让 PHP 加密文件的方法。我过去只使用 PHP 系统调用来运行对文件进行编码的脚本:

#!/bin/sh
/usr/bin/openssl aes-256-cbc -a -salt -k $1 -in $2

参数 1 是要使用的密码,参数 2 是数据。然后,我在计算机上使用第二个脚本来解密该文件。

#!/bin/sh
/usr/bin/openssl aes-256-cbc -a -d -salt -k $1 -in $2

由于禁用了 PHP 系统调用,因此这种加密方法在生产主机上不起作用。如果可能的话,我也不希望更改解码功能。

有没有办法仅使用 PHP 复制上述加密函数?

最佳答案

看看 mcyrpt_encrypt() :

string mcrypt_encrypt ( string $cipher , string $key , string $data , 
string $mode [, string $iv ] )

设置$cipherMCRYPT_RIJNDAEL_128 (AES-128) 和 $modeMCRYPT_MODE_CBC .

然后使用 base64_encode() 生成 base-64 编码输出(即:-a 选项做)。


openssl 导出 key 和 IV 如下:

Key = MD5(Password + Salt)
IV = MD5(Key + Password + Salt)

在哪里Salt是一个 8 字节的盐。考虑到这一点,我创建了简单的 encrypt()decrypt()套路:


function ssl_encrypt($pass, $data) {

$salt = substr(md5(mt_rand(), true), 8);

$key = md5($pass . $salt, true);
$iv = md5($key . $pass . $salt, true);

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

return base64_encode('Salted__' . $salt . $ct);
}

function ssl_decrypt($pass, $data) {

$data = base64_decode($data);
$salt = substr($data, 8, 8);
$ct = substr($data, 16);

$key = md5($pass . $salt, true);
$iv = md5($key . $pass . $salt, true);

$pt = mcrypt_decrypt (MCRYPT_RIJNDAEL_128, $key, $ct,
MCRYPT_MODE_CBC, $iv);

return $pt;
}

参数$data接受要加密的字符串。如果你想加密一个文件,你必须通过 file_get_contents() 获取它。或类似的,然后将其提供给函数。

用法:

echo ssl_encrypt('super secret key', 'Hello World');

生成类似的东西(由于随机盐每次都会改变):

U2FsdGVkX18uygnq8bZYi6f62FzaeAnyB90U6v+Pyrk=

关于PHP 加密数据,Bash 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7477302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com