aesecbpkcs5 php_PHP AES加解密 (ECB模式/sha1prng算法/PKCS5Padding和PKCS7Padding补码)

这篇博客介绍了PHP中使用AES-128-ECB加密算法进行加解密的方法,包括PKCS5Padding和PKCS7Padding的补码方式,以及如何使用base64编码。提供了适用于PHP7+和PHP5+的代码示例,展示了如何利用SHA1PRNG生成密钥。
摘要由CSDN通过智能技术生成

php7+ 版本

/**

* [AesSecurity aes加密,支持PHP7+]

* 算法模式:ECB

* 密钥长度:128

* 补码方式:PKCS7Padding

* 解密串编码方式:base64/十六进制

*/

class Aes

{

/**

* [encrypt aes加密]

* @param [type] $input [要加密的数据]

* @param [type] $key [加密key]

* @return [type] [加密后的数据]

*/

public static function encrypt($input, $key)

{

$key = self::_sha1prng($key);

$iv = '';

$data = openssl_encrypt($input, 'AES-128-ECB', $key, OPENSSL_RAW_DATA, $iv);

$data = base64_encode($data);

return $data;

}

/**

* [decrypt aes解密]

* @param [type] $sStr [要解密的数据]

* @param [type] $sKey [加密key]

* @return [type] [解密后的数据]

*/

public static function decrypt($sStr, $sKey)

{

$sKey = self::_sha1prng($sKey);

$iv = '';

$decrypted = openssl_decrypt(base64_decode($sStr), 'AES-128-ECB', $sKey, OPENSSL_RAW_DATA, $iv);

return $decrypted;

}

/**

* SHA1PRNG算法

* @param [type] $key [description]

* @return [type] [description]

*/

private static function _sha1prng($key)

{

return substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);

}

}

php5+ 版本

/**

* [Aes aes加密,支持PHP5+]

* 算法模式:ECB

* 密钥长度:128

* 补码方式:PKCS5Padding/PKCS7Padding

* 解密串编码方式:base64/十六进制

*/

class Aes {

public static function encrypt($plain, $key)

{

if (trim($key) == '') {

return false;

}

$plain = strval($plain);

$block_size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$padded_data = self::_pkcs5_pad($plain, $block_size);

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, self::_sha1prng($key), $padded_data, MCRYPT_MODE_ECB, $iv);

return base64_encode($encrypted);

}

public static function decrypt($cipher, $key)

{

if ( ! is_string($cipher) || trim($key) == '') {

return false;

}

if ($decoded = base64_decode($cipher)) {

$block_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$iv = mcrypt_create_iv($block_size, MCRYPT_RAND);

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, self::_sha1prng($key), $decoded, MCRYPT_MODE_ECB, $iv);

return self::_pkcs5_unpad($decrypted);

}

return false;

}

private static function _sha1prng($key)

{

return substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);

}

private static function _pkcs5_pad($text, $block_size)

{

$pad = $block_size - (strlen($text) % $block_size);

return $text . str_repeat(chr($pad), $pad);

}

private static function _pkcs5_unpad($text)

{

$end = substr($text, -1);

$last = ord($end);

$len = strlen($text) - $last;

if (substr($text, $len) == str_repeat($end, $last)) {

return substr($text, 0, $len);

}

return false;

}

private static function _pkcs7_pad($string, $blocksize = 32)

{

$len = strlen($string);

$pad = $blocksize - ($len % $blocksize);

$string .= str_repeat(chr($pad), $pad);

return $string;

}

private static function _pkcs7_unpad($string)

{

$pad = ord ($string {strlen($string) - 1});

if ($pad > strlen($string)) {

return false;

}

if (strspn ($string, chr ($pad), strlen($string) - $pad) != $pad) {

return false;

}

return substr($string, 0, - 1 * $pad);

}

}

代码中的相关算法

算法模式:ECB

密钥长度:128

补码方式:PKCS5Padding

解密串编码方式:base64/十六进制

ECB 模式不需求设置 iv

本人工作比较忙,时间有限,下次再展开讨论~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值