首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php模式ccm openssl mode错误

php模式ccm openssl mode错误
EN

Stack Overflow用户
提问于 2020-05-27 05:01:20
回答 1查看 140关注 0票数 0

您好,我正在尝试通过php openssl函数使用AES-CCM-256加密,但它似乎有一个错误,当IV是12字节时,它会产生错误的标记,就像有人在这篇文章here中向我解释的那样

是否有任何解决方案或其他方法可以在PHP中使用IV/nonce (12字节)加密aes-ccm-256

注意:对于IV/nonce,我需要使用12个字节的长度,不幸的是,我必须使用php

EN

回答 1

Stack Overflow用户

发布于 2020-05-27 05:29:08

我使用Openssl库很幸运地做到了这一点。我写了一个库,包装了Openssl中的一些加密和解密功能,希望能让它变得更简单。

下面是一个简短的示例,它使用AES-256-CCM对使用12字节IV的字符串进行加密和解密:

代码语言:javascript
复制
use Encryption\Encryption;

require('../vendor/autoload.php');

$text = 'The quick brown fox jumps over the lazy dog';
$key  = 'secretkey';

$encryption = Encryption::getEncryptionObject('AES-256-CCM');
$iv = $encryption->generateIv();
$encryptedText = $encryption->encrypt($text, $key, $iv, $tag);
$decryptedText = $encryption->decrypt($encryptedText, $key, $iv, $tag);

printf('Cipher   : %s%s', $encryption->getName(), PHP_EOL);
printf('IV       : %s%s', base64_encode($iv), PHP_EOL);
printf('IV Length: %s%s', strlen($iv), PHP_EOL);
printf('Tag      : %s%s', base64_encode($tag), PHP_EOL);
printf('Encrypted: %s%s', $encryptedText, PHP_EOL);
printf('Decrypted: %s%s', $decryptedText, PHP_EOL);

输出:

代码语言:javascript
复制
Cipher   : AES-256-CCM
IV       : i925n5X6xdrKyImY
IV Length: 12
Tag      : b/fl4BEDAGN5U0P40/GN7g==
Encrypted: zcfFmoRKZNxxwh4z9FGaY63bl4YXYnzSxlLFEE+e9QqsMhoJjpsJ6ALH2ho+ochS
Decrypted: The quick brown fox jumps over the lazy dog

如果这对您来说已经足够好了,那么这个库就叫做PHP Simple Encryption,并且可以作为composer package使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62031354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档