php mcrypt aes,简单的PHP加密/解密(Mcrypt,AES)

我正在寻找使用Mcrypt的简单但加密强大的AES实现AES.

希望将其归结为一对简单的函数,$garble = encrypt($key,$payload)和$payload = decrypt($key,$garble).

解决方法:

我最近正在学习这个主题,并将此答案作为社区维基发布,以分享我的知识,有待纠正.

我的理解是,使用Mcrypt可以使用以下常量作为选项来实现AES:

MCRYPT_RIJNDAEL_128 // as cipher

MCRYPT_MODE_CBC // as mode

MCRYPT_MODE_DEV_URANDOM // as random source (for IV)

在加密期间,应使用随机化的非秘密初始化向量(IV)来随机化每个加密(因此相同的加密永远不会产生相同的加密).该IV应附加到加密结果,以便在解密期间稍后使用.

结果应为Base 64编码,以实现简单的兼容性.

执行:

define('IV_SIZE', mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));

function encrypt ($key, $payload) {

$iv = mcrypt_create_iv(IV_SIZE, MCRYPT_DEV_URANDOM);

$crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $payload, MCRYPT_MODE_CBC, $iv);

$combo = $iv . $crypt;

$garble = base64_encode($iv . $crypt);

return $garble;

}

function decrypt ($key, $garble) {

$combo = base64_decode($garble);

$iv = substr($combo, 0, IV_SIZE);

$crypt = substr($combo, IV_SIZE, strlen($combo));

$payload = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypt, MCRYPT_MODE_CBC, $iv);

return $payload;

}

//:::::::::::: TESTING ::::::::::::

$key = "secret-key-is-secret";

$payload = "In 1435 the abbey came into conflict with the townspeople of Bamberg and was plundered.";

// ENCRYPTION

$garble = encrypt($key, $payload);

// DECRYPTION

$end_result = decrypt($key, $garble);

// Outputting Results

echo "Encrypted: ", var_dump($garble), "
";

echo "Decrypted: ", var_dump($end_result);

?>

输出如下:

Encrypted: string(152) "4dZcfPgS9DRldq+2pzvi7oAth/baXQOrMmt42la06ZkcmdQATG8mfO+t233MyUXSPYyjnmFMLwwHxpYiDmxvkKvRjLc0qPFfuIG1VrVon5EFxXEFqY6dZnApeE2sRKd2iv8m+DiiiykXBZ+LtRMUCw=="

Decrypted: string(96) "In 1435 the abbey came into conflict with the townspeople of Bamberg and was plundered."

标签:php,cryptography,encryption,aes,mcrypt

来源: https://codeday.me/bug/20190716/1477341.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值