我试图使用节点加密提供的aes-128-gcm实现加密/解密功能。根据我的理解,gcm对密文进行加密,但也对其进行散列,并将其作为“身份验证标记”提供。但是,我不断得到错误:“不支持状态或无法对数据进行身份验证”。
我不确定这是否是我的代码中的错误--查看加密的密文和auth标记,由decrypt函数提取的密文和由encrypt函数产生的密文是相同的。
function encrypt(plaintext) {
// IV is being generated for each encryption
var iv = crypto.randomBytes(12),
cipher = crypto.createCipheriv(aes,key,iv),
encryptedData = cipher.update(plaintext),
tag;
// Cipher.final has been called, so no more encryption/updates can take place
encryptedData += cipher.final();
// Auth tag must be generated after cipher.final()
tag = cipher.getAuthTag();
return encryptedData + "$$" + tag.toString('hex') + "$$" + iv.toString('hex');
}
function decrypt(ciphertext) {
var cipherSplit = ciphertext.split("$$"),
text = cipherSplit[0],
tag = Buffer.from(cipherSplit[1], 'hex'),
iv = Buffer.from(cipherSplit[2], 'hex'),
decipher = crypto.createDecipheriv(aes,key,iv);
decipher.setAuthTag(tag);
var decryptedData = decipher.update(text);
decryptedData += decipher.final();
}
错误是由decipher.final()抛出的。
我设法解决了这个问题:问题是我没有为cipher.final()指定编码类型,而且我在字符串中返回它,所以它没有返回decipher.final()所期望的缓冲区对象。
为了解决这个问题,我在我的cipher.update和cipher.final中的“十六进制”编码参数中添加了“UTF-8”,反之亦然。
我通过运行以下代码得到下面的错误。 错误:decipheriv.final(node:internal/crypto/cipher:196:29)在decrypt(/users/username/dev/playground/node/src/index.ts:14:65)处处于不支持状态或无法对数据进行身份验证 节点中aes-128-gcm的“不支持状态或无法验证数据” 在nodejs解密中获取
我得到了一个错误: 不支持的密码算法(AES-256-GCM)(运行时错误) 但我似乎有所有的要求: $openssl enc-help 2>&1 grep gcm -AES-128-ECB-AES-128-GCM-AES-128-OFB -AES-192-ECB-AES-192-GCM-AES-192-OFB -AES-256-ECB-AES-256-GCM-AES-256-OFB Ruby解释
我试图在objective c中加密/解密一个AES-128 GCM格式的字符串。我到处都找过了,但似乎找不到有效的解决方案。
问题内容: 根据Java 7文档以及第三方供应商的说法,似乎Java 7应该支持AES-GCM套件: IBM Java 7 Java 7 SSL文档 在客户端和服务器之间的协商中遇到一些错误,由于仅将其限制为AES- GCM密码而无法协商密码。经过调查,我发现客户端或服务器(tomcat实例)均不支持密码套件。在客户端上运行一些示例代码以获取输出: 不知道是否有人遇到过这样的问题。 Java 7是
我已经使用OpenSSL AES-256-GCM加密了一个文件。由于aes-256-gcm不受命令行支持,我已经安装了LibreSSL,我可以使用下面的命令加密文件的数据。 openssl ENC-AES-256-GCM-K 616161616161616161616161616161616161616161616161616161616161616161-IV 768A5C31A97D5FE9-