2

我认为这很简单,但我找不到一个简单的解决方案..

有没有办法用简单的密码对字符串进行编码和解码?像这样的东西:

$encoded = stringEncrypt('someText','simpleKey');
echo stringDecrypt($encoded,'simpleKey'); //outputs someText;

我试过这个但没有运气:

function lime_encrypt($data,$key)
{
    return base_convert(bin2hex($data),16,10)  *   base_convert(bin2hex($key),16,10)  ;
}

function lime_decrypt($data,$key)
{
    return pack("H*",base_convert($data/base_convert(bin2hex($key),16,10),10,16));
}

我认为这是因为乘法不返回整数,而是返回数学表达式 6.28414834514E+25

知道如何实现吗?


编辑

我重用了在堆栈溢出时发现的另一个代码,结果如下:

function lime_encrypt($data,$key)
{
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $data, MCRYPT_MODE_CBC, md5(md5($key))));
}

function lime_decrypt($data,$key)
{
    return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($data), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}

但我最终得到一个致命错误:在 linux centOS 上使用 php > 5 调用未定义的函数 mcrypt_encrypt()。

所以我宁愿保持简单和可移动到其他主机......


解决方案?

最后,我正在使用这个,在博客上找到:

function lime_encrypt($data,$key)
{
    return openssl_encrypt($data, 'AES-128-CBC', $key,0,'fgrgfvcfghtfdrfg');
}

function lime_decrypt($data,$key)
{
    return openssl_decrypt($data, 'AES-128-CBC', $key,0,'fgrgfvcfghtfdrfg');
}
4

1 回答 1

0

有没有办法用简单的密码对字符串进行编码和解码?

查看defuse/php-encryption。具体来说,KeyProtectedByPassword功能。

如果您使用的是 PHP 7.2,您还可以使用sodium_crypto_pwhash()sodium_crypto_secretbox()(with base64_encode()) 的组合来实现一致(但不可互操作)的结果。

于 2018-11-01T22:36:56.637 回答