2 回答
TA贡献1848条经验 获得超10个赞
在PHP代码中,密钥不是十六进制解码的,而是一个大小为32字节的二进制字符串,因此对于AES-128来说太大了。
PHP/OpenSSL 通过仅考虑前 16 个字节来隐式截断密钥。
在 Go 中,只需使用key := []byte("bc7316929fe1545b")
在节点JS中:获取 PHP 结果。const key = Buffer.from("bc7316929fe1545b", "utf8")
相反,在 PHP 代码中,密钥也可以使用 进行十六进制解码。hex2bin()
TA贡献1826条经验 获得超6个赞
这里的 c/c++ 版本,但输出与 golang/nodejs 还不一样。
#include <openssl/aes.h>
#include <stdio.h>
#include <string.h>
int main() {
AES_KEY aes_key;
unsigned char key[AES_BLOCK_SIZE] = {0xbc, 0x73, 0x16, 0x92, 0x9f, 0xe1, 0x54, 0x5b, 0xf0, 0xb9, 0x8d, 0x11, 0x4e, 0xe3, 0xec, 0xb8 };
unsigned char iv[AES_BLOCK_SIZE] = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6};
unsigned char ecount[AES_BLOCK_SIZE]; memset( ecount, 0, 16 );
unsigned int num = 0 ;
const char *x = "aaa";
unsigned char out[16];
AES_set_encrypt_key(key, 128, &aes_key);
AES_ctr128_encrypt( (const unsigned char *) x, out, AES_BLOCK_SIZE, &aes_key, iv, ecount, &num);
for (int k = 0; k < 3; k++) printf("%02x", out[k]); // c9aa18
printf( "\n");
return 0;
}
// g++ -o aes-simple aes-simple.cpp -I/usr/local/ssl/include -L/usr/local/ssl/lib -g -lcrypto
- 2 回答
- 0 关注
- 70 浏览
添加回答
举报