【发布时间】:2018-05-09 13:32:21
【问题描述】:
我正在尝试了解如何使用 this c library (tiny-AES-c)。作为一名 Web 开发人员,我希望获得 this JS fiddle 的等效 C 代码。
JS 代码很简单:
// Encrypt
var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123');
console.log("Encrypted: " + ciphertext.toString());
// Decrypt
var bytes = CryptoJS.AES.decrypt(ciphertext.toString(), 'secret key 123');
var plaintext = bytes.toString(CryptoJS.enc.Utf8);
console.log("Decrypted: " + plaintext);
给定要加密的消息和秘密,代码生成加密数据并将结果转换为字符串。
我的 C 代码:
int main()
{
uint8_t in[] = "my message";
uint8_t key[] = "secret key 123";
struct AES_ctx ctx;
AES_init_ctx(&ctx, key);
printf("ORIG: %s",(char*) in);
// Encrypt
AES_ECB_encrypt(&ctx, in);
printf("\nENC: %s",(char*) in);
// Decrypt
AES_ECB_decrypt(&ctx, in);
printf("\nDEC: %s",(char*) in);
return 0;
}
输出:
ORIG: my message
ENC: ̤�+��5<n]EYK�ظ/����
DEC: my message%
我知道我不应该尝试将结果打印为字符串,但无法弄清楚如何使用 tiny-AES-c 获得类似的(与 JS 相同的)结果API,加上当我尝试使用更长的消息时,我得到了奇怪的结果,让我认为我使用这个库的方式有误。
问:C代码相当于上面的JS是什么?
【问题讨论】:
-
您想使用 AES 加密字符串?这就是整个问题吗? (很抱歉无法理解)
-
不,问题是特定于库的。谢谢。
-
我明白了,哦,我不知道那个图书馆
-
如果您正在寻找良好的安全性,请使用经过严格审查的实现,例如由语言或平台提供商提供的。虽然结果相同,但可能存在时间缺陷或其他边信道漏洞。此外,缺乏对 ECB 和 CBC 模式的填充支持是有问题的,并且空填充不是一个好的解决方案。许多解决方案使用速度快几个数量级的处理器 AES 指令。
-
谢谢@zaph,重点是我在 WebAssembly 模型中使用此代码,使用 3rd 方库令人头疼。我正在尝试仅提取必要的代码。
标签: javascript c api encryption aes