You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PHPopenssl_encrypt和JavaScriptcrypto.subtle.encrypt产生不同的结果(AES-256-GCM)。

问题描述:

当使用 PHP openssl_encrypt 进行 AES-256-GCM 加密时,其生成的结果与使用 JavaScript crypto.subtle.encrypt 函数生成的结果不同。这可能是由于两者使用了不同的默认值,如加密算法、密钥长度、填充、IV 等。

解决方案

  1. 明确加密算法和密钥长度

AES-256-GCM 是一种将 AES 算法和 GCM (Galois Counter Mode) 模式结合使用的加密算法,适用于需要数据加密和完整性验证的场景。在 PHP 中,使用 openssl_encrypt 函数进行加密时,必须明确指定加密算法和密钥长度,示例代码如下:

$plaintext = "test plaintext";
$key = "01234567890123456789012345678901"; // 32 Bytes

$ciphertext = openssl_encrypt($plaintext, "aes-256-gcm", $key, OPENSSL_RAW_DATA, $iv, $tag);

在 JavaScript 中,使用 crypto.subtle.encrypt 函数进行加密时,需要明确指定加密算法和密钥长度,示例代码如下:

const plaintext = "test plaintext";
const keyData = new Uint8Array([0x01, 0x23, 0x45, ...]); // 32 Bytes
const ivData = new Uint8Array([0x67, 0x45, ...]);

const algorithm = {
  name: "AES-GCM",
  iv: ivData,
  length: 256,
};

const key = await crypto.subtle.importKey("raw", keyData, algorithm, true, ["encrypt"]);

const ciphertext = await crypto.subtle.encrypt(algorithm, key, plaintextData);
  1. 明确填充方式和 IV

在 PHP 中,默认使用 AUTO 填充方式,而在 JavaScript 中,默认使用无填充模式。同时,在 AES-GCM 加密中,需要明确指定 IV,而 IV 不应该是使用随机数或者确定性的值。示例代码如下:

$plaintext = "test plaintext";
$key = "01234567890123456789012345678901"; // 32 Bytes
$iv = openssl_random_pseudo_bytes(96/8); // Generate random IV

$ciphertext = openssl_encrypt($plaintext, "aes-256-gcm", $key, OPENSSL_RAW_DATA, $iv, $tag, "", 16); // Use
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

Go 语言微服务介绍与开发实战|社区征文

并在出现问题时重试一个不同的节点。- 信息编码:基于内容类型的**动态信息编码**。客户端和服务器将与内容类型一起使用编解码器,为你无缝编码和解码 Go 类型。任何种类的消息都可以被编码并从不同的客户端发送。... "crypto/aes" "crypto/cipher" "encoding/base64")var initVector = []byte{35, 46, 57, 24, 85, 35, 24, 74, 87, 35, 88, 98, 66, 32, 14, 05}// 字符串加密函数func EncryptString(key, text string) st...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

PHPopenssl_encrypt和JavaScriptcrypto.subtle.encrypt产生不同的结果(AES-256-GCM)。 -优选内容

encrypt/decrypt
介绍该接口用于数据加解密,详细定义及用法参见MDN官方文档 encrypt 、decrypt。 算法对称加密算法 AES CTR/CBC/GCM。 非对称加密算法 RSA OAEP。 示例javascript async function encrypt_handle(key, plain) { var algorithm = {name: "AES-CBC"}; return await crypto.subtle.encrypt(algorithm, key, plain);}async function decrypt_handle(key, cipher) { var algorithm = {name: "AES-CBC"}; return await crypto.subt...
sign/verify
介绍详细定义及用法参见MDN官方文档sign 、verify。 用法数据签名和验签常用于身份识别,鉴权,密钥分发等。 算法RSA:常用算法 HMAC RSASSA PKCS1 v1.5 RSA PSS ECDSA 示例javascript async function sign_handle(priv_key, plain) { var algorithm = {name: "RSASSA-PKCS1-v1_5"}; return await crypto.subtle.sign(algorithm, priv_key, plain);}async function verify_handle(pub_key, plain, sig) { var algorithm = {name: "...
importKey/exportKey/generateKey
介绍该接口用于密钥导入,导出、以及随机生成,详细定义及用法参见MDN官方文档importKey、exportKey、generateKey。 算法RSA HMAC AES ECDSA 示例javascript async function handle() { var algorithm = {name: "HMAC", hash: {name: "SHA-512"}}; var key = await crypto.subtle.generateKey(algorithm, true, ['sign', 'verify']); var raw_key = await crypto.subtle.exportKey("Raw", key); var import_key = await...
Go 语言微服务介绍与开发实战|社区征文
并在出现问题时重试一个不同的节点。- 信息编码:基于内容类型的**动态信息编码**。客户端和服务器将与内容类型一起使用编解码器,为你无缝编码和解码 Go 类型。任何种类的消息都可以被编码并从不同的客户端发送。... "crypto/aes" "crypto/cipher" "encoding/base64")var initVector = []byte{35, 46, 57, 24, 85, 35, 24, 74, 87, 35, 88, 98, 66, 32, 14, 05}// 字符串加密函数func EncryptString(key, text string) st...

PHPopenssl_encrypt和JavaScriptcrypto.subtle.encrypt产生不同的结果(AES-256-GCM)。 -相关内容

digest

介绍详细定义及用法参见MDN官方文档digest。 用法将数据映射到指定长度的哈希空间中,过程不可逆。 算法SHA1/256/384/512,推荐使用SHA256,SHA512 MD5 示例javascript async function digest_handle(data) { var algorithm = {name: "SHA256"}; return await crypto.subtle.digest(algorithm, data);}

接口调用最佳实践

本文档介绍数据实时消费接口调用的最佳实践。 概述 客户侧在调用内容洞察平台的接口时,会存在一定的调用门槛,因此,特提供常规技术栈的数据实时消费接口调用的最佳实践。 备注:发文实时流式接口文档:数据消费接口 最佳实践 Golang核心:利用Golang轻量级协程的异步属性,扩大请求的并发量来提高单机的整体消费QPS 在测试条件下,平均单接口的QPS可达40+ 示例代码中包含一些额外的状态管理,以满足长时间的持续消费: access_token的过期...

H5套餐配置

Authorization String 是 HMAC-SHA256 Credential={AccessKeyId}/{ShortDate}/{Region}/{Service}/request,SignedHeaders={SignedHeaders}, Signature={Signature} HMAC-SHA256:签名方法Credential:签名凭证,... python3 from Crypto.Cipher import AESimport base64 key为秘钥, iv为初始化向量, content为回调HTTP报文的body内容cipher = AES.new(key, AES.MODE_CBC, iv)src_cmp_details = json.loads(content)["source_com...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

TokenPro接口

Authorization String 是 HMAC-SHA256 Credential={AccessKeyId}/{ShortDate}/{Region}/{Service}/request,SignedHeaders={SignedHeaders}, Signature={Signature} HMAC-SHA256:签名方法Credential:签名凭证,... python3 from Crypto.Cipher import AESimport base64 key为秘钥, iv为初始化向量, content为回调HTTP报文的body内容cipher = AES.new(key, AES.MODE_CBC, iv)src_cmp_details = json.loads(content)["source_com...

Token接口

Authorization String 是 HMAC-SHA256 Credential={AccessKeyId}/{ShortDate}/{Region}/{Service}/request,SignedHeaders={SignedHeaders}, Signature={Signature} HMAC-SHA256:签名方法Credential:签名凭证,... python3 from Crypto.Cipher import AESimport base64 key为秘钥, iv为初始化向量, content为回调HTTP报文的body内容cipher = AES.new(key, AES.MODE_CBC, iv)src_cmp_details = json.loads(content)["source_com...

Token接口

Authorization String 是 HMAC-SHA256 Credential={AccessKeyId}/{ShortDate}/{Region}/{Service}/request,SignedHeaders={SignedHeaders}, Signature={Signature} HMAC-SHA256:签名方法Credential:签名凭证,... python3 from Crypto.Cipher import AESimport base64 key为秘钥, iv为初始化向量, content为回调HTTP报文的body内容cipher = AES.new(key, AES.MODE_CBC, iv)src_cmp_details = json.loads(content)["source_com...

Grafana监控看板搭建

是第一步中数据源配置的账号和密码,修改之后,单击保存。 变量 javascript var grafanaAccount = "xxx";var grafanaKey = "xxx";var accessKeyId = "xxxx";var secretKey = "xxxx==";示例代码 javascript var __cre... this.request.headers[constant.contentSha256Header] = this.bodySha256 this.buf2hex(await util.crypto.sha256(body)); } } async authorization(credentials, datetime) { const parts = []; ...

配置思科防火墙

与单独购买的公网IP实例不同,是不可单独持有的资源,生命周期与VPN网关保持一致。 IKEv1版本火山引擎IPsec 参数配置IPsec连接预共享密钥:test@1234 IKE配置 策略 取值 认证算法 sha256 加密算法 aes192 DH算法 gr... crypto ikev1 policy 1 定义ikev1第一阶段协商序号为1,范围为1~65535,序号越小优先级越高。authentication pre-share 配置认证方法为预共享密钥。encryption aes 设置第一阶段协商数据加密算法为aes。hash sha...

思科防火墙配置文件

本文为您介绍如何在用户本地VPN网关是思科(cisico)防火墙的场景下,配置本地IPsec连接的配置文件。 说明 同一厂商不同型号防火墙的配置文件可能存在差异,本文仅做示例参考,具体请咨询防火墙厂商。本文使用的预共享密... 配置文件csr版本crypto ikev2 proposal ikev2proposal IKE版本密钥交换协议版本encryption aes 加密算法integrity md5 认证算法group 1 DH算法lifetime 86400 第一阶段协商的生存时间crypto ikev2 policy ik...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询