PHP 加密数据,Bash 解密
我正在尝试想出一种让 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 来复制上述加密功能?
I am trying to come up with a way to have PHP encrypt a file. I used to just use a PHP system call to run a script that encoded the file:
#!/bin/sh
/usr/bin/openssl aes-256-cbc -a -salt -k $1 -in $2
Argument 1 was the password to use and argument 2 is the data. I then use a second script on a computer to de-crypt the file.
#!/bin/sh
/usr/bin/openssl aes-256-cbc -a -d -salt -k $1 -in $2
This method of encrypting will not work on a production host as the PHP system call is disabled. I also would prefer not the change the decode function if at all possible.
Is there a way to replicate the above encrypt function using only PHP?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看看
mcyrpt_encrypt()
:将
$cipher
设置为MCRYPT_RIJNDAEL_128
(AES-128),并将$mode
设置为MCRYPT_MODE_CBC
。然后使用
base64_encode()
生成base-64 编码输出(即:-a
选项是什么做)。
openssl 派生密钥和 IV 如下:
其中
Salt
是 8 字节盐。考虑到这一点,我创建了简单的encrypt()
和decrypt()
例程:参数
$data
接受要加密的字符串。如果您想加密文件,则必须通过 file_get_contents() 或类似方法获取它,然后将其提供给该函数。用法:
生成类似的东西(由于随机盐而每次都会改变):
Take a look at
mcyrpt_encrypt()
:Set
$cipher
toMCRYPT_RIJNDAEL_128
(AES-128), and$mode
toMCRYPT_MODE_CBC
.Then use
base64_encode()
to generate a base-64 encoded output (ie: what the-a
optiondoes).
openssl derives the key and IV as follows:
Where
Salt
is a 8 byte salt. With this in mind, I created simpleencrypt()
anddecrypt()
routines:The parameter
$data
takes the string to be encrypted. If you want to encrypt a file, you'll have to get it viafile_get_contents()
or similar and then give that to the function.Usage:
Generates something like (will change every time because of the random salt):
正如上面评论中所述,填充对于完成这项工作是必要的。下面的函数将创建一个可以在命令行上解密的文件,如下所示:
test.txt 文件是根据下面 ssl_encrypt 函数的输出创建的。
用法示例:
参考文献: http://juan.boxfi.com/2010/03/16/write-openssl-files-in-php/
As stated above in the comments padding is necessary to make this work. The function below will make a file that can be decrypted on the command line like this:
The test.txt file is created from the output of the ssl_encrypt function below.
Example Usage:
References: http://juan.boxfi.com/2010/03/16/write-openssl-files-in-php/
也许是 PHP 的 OpenSSL 库?
Perhaps PHP's OpenSSL library?