问题标签 [aes-gcm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1164 浏览

java - 如何为在 Java 7 中运行的 Tomcat 7 添加 AES-GCM 支持

我很清楚 Java 7 默认不支持基于 GCM 的密码。因此,我试图通过 Bouncy Castle 完成它。

我在 Tomcat 的 HTTPS 连接器中配置了以下密码:

ciphers="TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 "

我已经将bcprov-jdk15on-156.jar放在 jdk1.7.0_80/jre/lib/ext 中。

还向 jdk1.7.0_80/jre/lib/security/java.security 添加了以下属性

security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider

在 Tomcat 连接器中配置 GCM 密码时,客户端根本无法连接到我的服务器。似乎配置 Bouncy Castle 根本没有效果。

无论如何我可以使它工作吗?我可以使用的任何其他 JCE 提供程序吗?

注意:我使用的是 Oracle JDK 1.7.0_80。无法迁移到 Java 8。

0 投票
2 回答
669 浏览

openssl - 调用 EVP_DecryptUpdate 后可以设置 AES-GCM 标签吗?

在我看到的所有涉及使用 AES-GCM 的 OpenSSL EVP 接口的代码片段中(示例),代码大致如下所示:

在调用EVP_CTRL_GCM_SET_TAG 之后设置标签是否合法EVP_DecryptUpdate?例如,如果传入的密文正在流式传输,并且标签位于流的末尾,这将很方便。

相关问题:在EVP_CTRL_GCM_SET_TAG某处有正式记录吗?

0 投票
3 回答
5867 浏览

java - GCMParameterSpec 抛出 InvalidAlgorithmParameterException:未知参数类型

我正在做 android 数据加密以保存在 SharedPreferences 中。GCMParameterSpec 是在我用于AES/GCM/NoPadding加密的 API 19 中的 Android 中引入的。这就是我实现它的方式:

我的问题是,在 Android 4.4.2 (API 19) 中,我收到了提到的错误,但从 API 21 开始它可以工作。

关于异常,来自 Android 文档:

如果给定的算法参数不适合此密码,或者此密码需要算法参数并且 params 为空,或者给定的算法参数暗示的加密强度将超过法律限制(由配置的管辖权策略文件确定)。

我的问题是:这种行为是否有特定原因?为什么initCipher 中的方法不能识别参数?

我什至尝试在不提供特定 IV 的情况下进行加密:

一旦我尝试以相同的方式解密:

它抛出相同的异常(InvalidAlgorithmParameterException),说GCMParameterSpec解密需要 a。

我尝试给GCMParameterSpec唯一的解密,我得到未知的参数类型异常。

任何帮助表示赞赏

0 投票
1 回答
763 浏览

ruby - 如何使用 Ruby 2.3.1 获取 AES-128-GCM

我正在使用 OpenSSL 1.0.2k 和 Ruby 2.3.1,它支持“aes-128-gcm”,而不是“AES-128-GCM”算法。当与 OpenSSL 1.0.2k 捆绑在一起时,Ruby 2.4.0 支持这两者。

两者的区别究竟在哪里?区分大小写重要吗?

我找不到答案。如何使用 Ruby 2.3.1 获得 AES-128-GCM?

0 投票
1 回答
366 浏览

ubuntu - PJSIP 构建未找到 OpenSSL AES GCM 支持

当我尝试在 Lubuntu 16.04 x86_64 上构建 PJSIP 2.6 时,即使我安装了 OpenSSL,它也找不到 AES GCM 支持。

我还尝试构建一个单独的 OpenSSL 版本(1.1.0e)并且行为是相似的。如何启用 AES GCM 支持?

0 投票
3 回答
2311 浏览

c++ - 使用 AES/GCM 加密的已编译 Crypto++ 库代码是否使用英特尔的 AES-NI 指令?

我正在使用 Crypto++ 库实现AES256/GCM 加密和身份验证。我的代码是使用 Visual Studio 2008 作为 C++/MFC 项目编译的。这是一个较旧的项目,它使用了该库的早期版本,Cryptopp562.

我很好奇生成的编译代码是否会使用英特尔的AES-NI 指令?如果是这样,如果硬件(旧 CPU)不支持它会发生什么?

编辑: 这是我正在测试它的代码示例:

0 投票
1 回答
5347 浏览

python - AES-GCM 模式的正确随机数/iv 大小

编辑:问题可以简化为:以下 Node.js 代码给出“无效的 IV 长度”错误。为什么?IV应该是什么?


我在 GCM 模式下使用 AES 加密一些数据,但我使用两种不同的语言和库进行加密和解密,它们似乎对我需要的内容有不同的词汇表。

我正在使用 Python 库(Crypto)进行加密。该encrypt_and_digest方法采用 128 位密钥和一条消息,并返回一个 128 位随机数、128 位标记和一个密文。

(取自本例的加密代码)

我正在使用默认的 Node.js加密库进行解密。该库需要一个会话密钥、一个标签和一个 IV。当我将 Python 库中的 nonce 作为 IV 传递时,它给了我一个“invalid iv size”错误。 Node 库的示例似乎使用 12 个字符的字符串作为 IV。

我的解密代码如下所示(取自此处):

这个方案的 IV 和 nonce 有什么区别?我应该如何解决这个问题?谢谢!

0 投票
2 回答
10875 浏览

java - JAVA中的AES GCM加解密

我正在尝试在 JAVA 中实现 AES/GCM/NoPadding 加密和解密 .. 使用的密钥是来自接收方公钥和发送方私钥 (ECDH) 的共享密钥 .. 加密效果很好(有和没有iv)。但是,我无法解密...

我得到了异常: javax.crypto.BadPaddingException: mac check in GCM failed

0 投票
2 回答
1160 浏览

java - 随机存取加密数据 AES GCM 模式

随机访问 AES CTR 模式有一个很好的例子,它可以工作: Random access InputStream using AES CTR mode in android

但是,它不适用于 AES GCM 模式。解密时我得到垃圾。我不是加密专家,并且已经尝试破解它几天了。也许任何人都可以提供任何见解?我猜我需要以某种方式更改偏移量的 IV 计算,或者它与身份验证标签(我没有使用)有关。

0 投票
1 回答
177 浏览

android - 服务器如何从 android 应用程序获取对称密钥?

我正在开发一个关于加密的 Android 应用程序。以下代码用于生成 GCM 密钥:

我打算先把这个密钥发送到我的服务器,这样我就可以测试 GCM 是否工作了。因此,我使用此代码来获取密钥:

当然我失败了,我得到一个错误:

根据这个问题:Calling .getEncoded() on SecretKey 返回 null 那是因为 KeyStore 应该是唯一知道该密钥的人。但我真的对此感到困惑:我的服务器需要该密钥来解密来自 Android 应用程序的文件。但是我无法从 KeyStore 中取出密钥!有没有办法将密钥发送到服务器?