使用AesGcm类
我刚刚注意到.NET标准2.1/.NET Core 3.0最终添加了a aes-gcm加密的类. 然而,它的API似乎与通常的.NET加密类略有不同:它的 Encrypt 函数要求使用密码文本和标签的预分配的字节阵列,而不是提供它们本身.不幸的是,文档中没有显示适当使用该类别的例子. 我知道如何计算理论中AES加密的预期密码文本大小,但是我想知道这是否确实是"猜测"在那里的密码文本的"猜测"缓冲大小的预期方法.通常,加密库提供了照顾这些计算的功能. 有人使用AesGcm>? 解决方案 我现在弄清楚了. 我忘记了在GCM中,密码文本具有与纯文本相同的长度 ;与其他加密模式(如CBC)相反,不需要填充. NONCE和标签长度分别由AesGcm的NonceByteSizes和TagByteSizes属性确定. 使用此信息,可以通过以下方式完成加密: public string Encrypt(string plain) { // Get byte
0 2024-04-13
编程技术问答社区
使用EVP接口的AES-GCM的OpenSSL C示例
对于AES-GCM加密/解密,我尝试了这个问题. ctx = EVP_CIPHER_CTX_new(); //Get the cipher. cipher = EVP_aes_128_gcm (); #define GCM_IV "000000000000" #define GCM_ADD "0000" #define TAG_SIZE 16 #define ENC_SIZE 64 //Encrypt the data first. //Set the cipher and context only. retv = EVP_EncryptInit (ctx, cipher, NULL, NULL); //Set the nonce and tag sizes. //Set IV length. [Optional for GCM]. retv = EVP_CIPHER_CTX_ctrl
8 2024-04-08
编程技术问答社区
如何在GCM模式下使用AES连锁调用BCryptEncrypt和BCryptDecrypt?
使用Windows CNG API,我能够使用AES在GCM模式下使用AES加密并解密单个数据块.我现在想连续加密并解密多个缓冲区. 根据 如果对加密或解密的输入散布在多个 缓冲区,然后您必须链接到bcryptencrypt和 bcryptdecrypt功能.链接是通过设置 dwflags成员中的bcrypt_auth_mode_in_progress_flag flag. 如果我正确理解它,这意味着我可以在多个缓冲区上顺序调用BCryptEncrypt在末尾获得合并缓冲区的身份验证标签.同样,我可以在多个缓冲区上顺序调用BCryptDecrypt,同时将实际的身份验证检查推迟到结束.我无法做到这一点,看起来dwFlags的价值被忽略了.每当我使用BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG时,我都会得到0xc000a002的返回值,该值等于STATUS_AUTH_TAG_MISMATCH,如ntstatus.h. 中所定义 即使参数pbIV标记为
2 2024-04-06
编程技术问答社区
在C#中使用OpenSSL对PHP用AES256-GCM加密的字符串进行解密
我正在使用openssl在PHP中加密/解密字符串: function str_encryptaesgcm($plaintext, $password, $encoding = null) { $aes = array("key" => substr(hash("sha256", $password, true), 0, 32), "cipher" => "aes-256-gcm", "iv" => openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes-256-gcm"))); $encryptedstring = openssl_encrypt($plaintext, $aes["cipher"], $aes["key"], OPENSSL_RAW_DATA, $aes["iv"], $aes["tag"], "", 16); return $encoding == "hex" ? bin2he
2 2024-04-03
编程技术问答社区
苹果eciesEncryptionCofactorVariableIVX963SHA256AESGCM与BouncyCastle ECCDHwithSHA256KDF的比较
我正在尝试加密Java( eciesEccofactorpactorvariablevariablevariblevariablevariablevariablevariablevariablevariablevariablevariablevaribx96663shaa256shaaesgccmccm Apple的算法没有充分记录,但我发现有很大帮助. 我还在 ECCDHwithSHA256KDF使用x9.63 kdf代表ec cofactor dh,sha256作为prf package com.example.ios.encryption; import org.bouncycastle.jce.ECNamedCurveTable; import org.bouncycastle.jce.ECPointUtil; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bounc
0 2024-04-03
编程技术问答社区
解密TLS 1.2 AES-GCM数据包
我正在研究使用TLS_RSA_WITH_AES_128_GCM_SHA256 cipher的Java程序来解密 tls 1.2 会话.我使用Wireshark录制了一个测试会话. 大师秘密是已知的. No. Time Protocol Length Info 4 0.000124000 TLSv1.2 166 Client Hello 6 0.000202000 TLSv1.2 1074 Server Hello, Certificate, Server Hello Done 8 0.001071000 TLSv1.2 393 Client Key Exchange, Change Cipher Spec, Finished 9 0.003714000 TLSv1.2 301 New Session Ticket, Change Cipher Spec,
2 2024-04-03
编程技术问答社区
在JAVA中使用AES/GCM检测错误的密钥
我正在使用AES使用Bouncycastle加密/解密某些文件. 虽然我证明了错误的解密键,但也不例外. 我应该如何检查键是否不正确? 我的代码是: SecretKeySpec incorrectKey = new SecretKeySpec(keyBytes, "AES"); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC"); byte[] block = new byte[1048576]; int i; cipher.init(Cipher.DECRYPT_MODE, incorrectKey, ivSpec); BufferedInputStream fis=new BufferedInputStream(
0 2024-04-03
编程技术问答社区
是否可以在JDK 1.7上使用GCM和BC?
我正在尝试使用任何AES GCM变体进行TLS连接,并且据我了解,这应该是可能的,但我会得到此错误: Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1989) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1096) at sun.security.ssl.SSLSocket
2 2024-04-03
编程技术问答社区
AES GCM的加密和解密。PHP VS C# BouncyCastle
我目前正在努力将我的C#AES-GCM加密代码转换为PHP.但是,经过一些研究,C#ONE无法解释由我的PHP系统加密的文本.我想知道这两个代码是否有任何区别: c#与Bouncycastle: using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Engines; using Org.BouncyCastle.Crypto.Modes; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; using System; using System.IO; using System.Text; //the helper for all AES methods public class AESHelper { private const int KEY_BIT_SIZE = 256; private
0 2024-04-03
编程技术问答社区
用Java 8u20进行缓慢的AES GCM加密和解密
我试图使用AES/GCM/NOPADDING进行加密和解密数据.我安装了JCE无限强度策略文件,并在下面运行(简单的)基准.我使用openSSL进行了同样的操作,并且能够在我的PC上实现超过 1 GB/S 加密和解密. . 使用下面的基准测试,我只能在同一PC上使用Java 8获得 3 Mb/s 加密和解密.知道我做错了什么? public static void main(String[] args) throws Exception { final byte[] data = new byte[64 * 1024]; final byte[] encrypted = new byte[64 * 1024]; final byte[] key = new byte[32]; final byte[] iv = new byte[12]; final Random random = new Random(1); random.ne
2 2024-03-30
编程技术问答社区
IvParameterSpec和GCMParameterSpec与AES/GCM/NoPadding的区别
我正在使用AES/GCM/NoPadding算法对Android(API 19及以后)进行加密,然后将其解密. 我使用的密钥大小为32个字节,并提供给我 除了加密外,我还想知道何时尝试解密并使用错误的键.这就是为什么我更喜欢使用GCM作为我的模式来获得验证完整性的好处(我相信它可以安全地假设是ciphertext还是键是错误的,这会导致糟糕的解密异常,而不是乱七八糟) ) ) 我遇到的问题是,在Android API 19上使用上面的算法并用GCMParameterSpec初始化密码,我得到了NoSuchAlgorithmException,我没有指定任何提供者,允许Android为我选择一个可以支持我的android算法.在21+上,可以使用算法. 这就是我的初始化(类似于解密的类似),整个班级都发布在本文的结尾. cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES"), new GCMP
14 2024-02-03
编程技术问答社区
用Java实现带有认证标签的AES GCM
我在我的Android项目中使用了AES GCM身份验证,并且效果很好.但是,当与OpenSSL API生成标签进行比较时,请在身份验证标签中获得一些问题.请在下面找到Java代码: SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); byte[] iv = generateRandomIV(); IvParameterSpec ivspec = new IvParameterSpec(iv); Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivspec); int outputLength = cipher.getOutputSize(data.length); // Prepare output buffer byte[] output = new byte[outp
20 2024-01-28
编程技术问答社区
PKCS5Padding能否采用AES/GCM模式?
AES/GCM的填充模式是什么?我知道这可能是无效的,因为在欧洲央行模式下,它可以是PKCS5PADDID,在GCM模式下怎么样?在JCE界面中,我们需要提供"算法/模式/填充"(参考). 因此,我使用以下代码获取实例,并且在JDK中起作用,但在IBM SDK中失败了 找不到支持AES/GCM/PKCS5PADDING 的提供商 Cipher.getInstance("AES/GCM/PKCS5Padding"); 填充的真实用例是什么? 解决方案 gcm是一种流模式,这意味着密文仅与明文(不包括身份验证标签)一样长. GCM不需要填充.这意味着PKCS5PADDING版本实际上只是编程过程中不方便的非载纸的同义词. 一些提供商没有这种奇怪的模式. Java具有可插入的加密提供商,基本上所有JRE分布都有一个默认的加密提供商,它可能具有与其他提供商不同的密码字符串和默认值. 在某些情况下,填充明文是有道理的.例如,您可以通过附加随机长度pkcs5
14 2024-01-22
编程技术问答社区
使用其他工具验证AES-256-GCM实施
我需要验证遵循FIPS-197标准的工具的正确性.因此,我将收到三倍,我想解码这个三重(键,cypher,iv). 有没有办法简单地做到这一点?有没有在线实施,可以有用? 我刚刚发现,甚至没有两个具有AES-256的不同页面,其值与输出相同. 谢谢您的帮助. 编辑: 我需要验证自己对此的实施,我想通过与已验证的工具验证的测试向量进行检查. edit2: 我正在寻找一种验证我的实施的方法.因此,我考虑了测试向量或已验证的工具的另一个工具.这是我需要帮助的部分:在哪里可以找到测试向量或这样的工具? edit3:使用PHP 评估 我们正在使用" openssl_encrypt"进行评估. $CM = "aes-256-gcm"; //cypher mode $PT = "";//plain $CT = "";//cypher $key = ""; $iv = ""; $cypher = openssl_encrypt($PT, $CM, $key
8 2024-01-19
编程技术问答社区
JAVA中的AES GCM加密和解密
我正在尝试在Java中实现AES/GCM/NOPADDING加密和解密..使用的密钥是接收器的公共密钥和发件人的私钥(ECDH)的共享密钥.加密效果很好(良好(有和没有IV).但是,我无法解密... 我得到例外:javax.crypto.badpaddingexception:Mac在GCM失败 中检查 public static String encryptString(SecretKey key, String plainText) throws NoSuchProviderException, NoSuchAlgorithmException, NoSuchPaddingException, UnsupportedEncodingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { //IvParameterSpec ivSpec = new Iv
4 2024-01-19
编程技术问答社区
AES 128 GCM目标C osx
我试图以目标c中的AES-128 GCM格式加密/解密字符串.我到处都是,但似乎找不到工作解决方案. 解决方案 不久前我也有一个类似的问题,我能找到的最好的答案是这个.总而言之,iOS有一些功能可以做您想做的事,但它们是私人的. 所以,在苹果决定发布这些功能之前,我选择开发自己的图书馆,目前存储在您描述的情况可以通过这种方式实现: #import #import "IAGAesGcm.h" // For the case you describe, the key length is 128 bits (16 bytes) u_char keyBytes[kCCKeySizeAES128] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10}; NSData *ke
2 2024-01-19
编程技术问答社区
AES-GCM的Javascript解密不工作,但在Python中能工作
我想将一个小的python库移植到javaScript,以node.js运行. 我收到一条加密的消息,初始化向量和密钥. 在python3中,这些是进口: from cryptography.hazmat.primitives.ciphers.aead import AESGCM from binascii import unhexlify import sys import string from Cryptodome.Cipher import AES 和解密的工作原理: frame = unhexlify(frame) encryption_key = unhexlify(str_key) init_vector = unhexlify(str_iv) cipher = AES.new(encryption_key, AES.MODE_GCM, nonce=init_vector) decrypted_msg = cipher.decrypt(frame).h
0 2024-01-19
编程技术问答社区
OpenSSL GCM解密中的晚期认证
我正在使用OpenSSL的EVP接口来使用GCM模式实现AES加密. 现在,GCM是身份验证模式之一,提供了密码文本完整性.这意味着它会在密码文本(以及提供的其他数据)上生成标签(Mac-消息身份验证代码).稍后可以在解密前检查此标签,以确保尚未修改密码文本. 我根据此博客文章实施了加密: http://incog-izick.blogspot.in/2011/08/using-openssl-aes-gcm.html 解密时,我正在使用以下API调用(以该顺序): // setting cipher, key and iv EVP_DecryptInit (ctx, EVP_aes_128_gcm(), key, iv); // setting tag EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_GCM_SET_TAG, taglength, tagbuffer); // adding Add
0 2024-01-19
编程技术问答社区
无法使用Java解密AES-256 GCM
我有一个节点模块,可以使用AES-256 GCM加密和解密.现在,我还试图与Java解密,无论节点模块加密什么,但是我一直得到Aeadbadtagexception. 我本身已经测试了节点模块,并且可以确认其按预期工作.我知道Java假设身份验证标签是消息的最后一部分,因此我确保标签是插入节点模块中的最后一件事. 现在,我只是在用"你好"的单词测试.这是来自节点的加密消息: Q10blKuyyYozaRf0RVYW7bave8mT5wrJzSdURQQa3lEqEQtgYM3ss825YpCQ70A7hpq5ECPafAxdLMSIBZCxzGbv/Cj4i6W4JCJXuS107rUy0tAAQVQQA2ZhbrQ0gNV9QA== 现在并没有真正使用盐,因为我试图使事情保持简单以进行测试 节点模块: var crypto = require('crypto'); var encrypt = function(masterkey, plainText)
10 2024-01-19
编程技术问答社区
如何在PHP中使用GCM模式加密?
我一直在阅读很多有关 gcm 的信息,以及它多么棒,我想知道如何使用 aes-gcm 使用 php进行认证的加密.它在mcrypt()中支持吗?我在CodeIgniter框架文档中发现了对 GCM 的一些引用,这使我相信可以在 codeigniter . 我还遇到了有关 zend 的文档中的一些东西.我不想使用 codeigniter 驱动程序,因为我不使用任何框架,也不打算用于当前的项目.但是在我看来,如果 codeigniter 能够做到这一点,那么如果没有框架,我们应该能够做到. 似乎 gcm 是安全性和性能的方法(我看到了令人印象深刻的性能数字).我的感觉是我们需要这个,但找不到任何例子.有人必须了解如何实现这一目标.我知道 openssl . 任何帮助将不胜感激. 解决方案 您在这里问几个问题,所以我将按照上述方式分别解决: 在McRypt()? 中支持它 不,McRypt本身不支持AES加密.但是,它确实支持Rijndael(发音为"雨水"
2 2024-01-19
编程技术问答社区