我想在我的软件中使用AES_256_GCM。 OpenSSL wiki页面给出了一个例子:wiki page
它显示只有函数EVP_EncryptInit_ex(ctx,NULL,NULL,key,iv)使用键。
我的密钥是密码的SHA3_256哈希值(SHA3_256的Qt实现)
我想知道我是否必须使用PKCS#5来随机化密钥或函数来处理它。
答案 0 :(得分:1)
我的密钥是密码的SHA3_256哈希值(SHA3_256的Qt实现)。
您可能应该使用OpenSSL的PKCS5_PBKDF2_HMAC_SHA1
将密码消化为密钥。请参阅How to use PKCS5_PBKDF2_HMAC_SHA1()。
它表明只有函数
EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv)
使用密钥....我想知道我是否必须使用PKCS#5来 随机化密钥或功能处理。
字符串或文件的每次加密都应该有自己的随机IV。 IV 不能 重复。您的另一个选择是为每个字符串或文件使用随机密钥。
加密操作的输出是{IV,CipherText}
对。
AES_256_GCM
是个不错的选择。可以改善的几种方法之一是使用Integrated Encryption Scheme。您可以在GitHub上查看openssl-pkey-ec-ies。 Crypto++和BouncyCastle也有Elliptic Curve集成加密方案实现,因此您还有其他选择。
务必测试互操作。他们互操作,但它需要一些旋钮转动。互操作的问题在于提供它的标准太多了,而且每个标准都是不可互操作的。
为了让您了解细微差别,ECIES调用特定变量进行哈希处理(它是给定数据字符串的长度)。一个标准表示4个八位字节的变量,另一个标准表示8个八位字节。这是唯一的区别,如果您不知道,会导致互操作问题。