微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

解决方法

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

> Mcrypt Documentation

我的理解是,使用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编码,以实现简单的兼容性.

执行:

<?PHP

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,IV_SIZE);
  $crypt = substr($combo,IV_SIZE,strlen($combo));
  $payload = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$crypt,$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),"<br/><br/>";
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."

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐