加密AES 128

时间:2018-08-01 10:45:37

标签: php encryption aes pkcs#7 ecb

有人在工作中要求我按照以下说明实施对简单Web服务的请求:

AES加密:
类型:欧洲央行
大小:128bits
填充模式:PKCS7
密钥:9b6018215942b2e1da3797d3394779bf

在文档中(仅给出示例),他们说的是字符串:

  

2874838-49

加密过程必须生成:

  

BEE361962A1802A7BA2AD328DAE8B291

我一直在寻找类似的东西,但是给出的解决方案(例如herehere here等)都无法帮助我实现示例给出结果。

这是我现在尝试的最后一件事:

function aes128Encrypt($data, $key) {
  $padding = 32 - (strlen($data) % 32);
  $data .= str_repeat(chr($padding), $padding);
  return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB));
}
$data = "2874838-49";
$key = "9b6018215942b2e1da3797d3394779bf";    
echo aes128Encrypt($data, $key); // UdP7dXSTp6b5I986PLL8Gs3qH3rMj0SpQ0te4pP7M44=

1 个答案:

答案 0 :(得分:1)

编码算法将字节流返回给您编码后的数据。

您所提供的样本没有提供数据的base64编码变体,而是提供了十六进制表示形式。

对于您而言,只需将base64_encode换成bin2hex,答案就应该匹配。

function aes128Encrypt($data, $key) {
  $padding = 32 - (strlen($data) % 32);
  $data .= str_repeat(chr($padding), $padding);
  return bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB));
}
$data = "2874838-49";
$key = "keyshouldbeplacedhere";    
echo aes128Encrypt($data, $key);