我必须在OpenSSL中随机化密钥吗

我必须在OpenSSL中随机化密钥吗,openssl,cryptography,passwords,aes,pkcs#5,Openssl,Cryptography,Passwords,Aes,Pkcs#5,我想在我的软件中使用AES_256_GCM。OpenSSL wiki页面给了我一个例子:。 它表明只有函数EVP_EncryptInit_ex(ctx,NULL,NULL,key,iv)使用key。 我的密钥是密码的SHA3_256散列(SHA3_256的Qt实现)。 我想知道我是否必须使用PKCS#5来随机化密钥,或者函数会处理这个问题 我的密钥是密码的SHA3_256散列(SHA3_256的Qt实现) 您可能应该使用OpenSSL的PKCS5\u PBKDF2\u HMAC\u SHA1将密

我想在我的软件中使用AES_256_GCM。OpenSSL wiki页面给了我一个例子:。
它表明只有函数EVP_EncryptInit_ex(ctx,NULL,NULL,key,iv)使用key。
我的密钥是密码的SHA3_256散列(SHA3_256的Qt实现)。
我想知道我是否必须使用PKCS#5来随机化密钥,或者函数会处理这个问题

我的密钥是密码的SHA3_256散列(SHA3_256的Qt实现)

您可能应该使用OpenSSL的
PKCS5\u PBKDF2\u HMAC\u SHA1将密码分解为密钥。看


它显示只有函数
EVP_EncryptInit_ex(ctx,NULL,NULL,key,
iv)
使用按键。。。。我想知道我是否必须使用PKCS#5来 随机化键,否则函数将处理该问题

字符串或文件的每次加密都应该有自己的随机IV。IV不能重复。另一种选择是对每个字符串或文件使用随机键

加密操作的输出是
{IV,CipherText}


AES_256_GCM
是一个不错的选择。为数不多的改善方法之一是使用。您可以在GitHub上查看一下。还有椭圆曲线集成加密方案的实现,所以您有其他选择

一定要测试互操作性。它们可以互操作,但需要转动一些旋钮。互操作的问题在于提供互操作的标准太多,而且每个标准都有点不可互操作


为了让您了解这些细微差别,ECIES调用了一个特定变量进行散列(它是给定数据字符串的长度)。一种标准以4个八位字节表示变量,另一种标准以8个八位字节表示变量。这是唯一的区别,如果您不知道,会导致互操作问题。

这个问题似乎与主题无关,因为它与编程或开发无关。请参见帮助中心中的。这是关于编程的,因为我想知道函数EVP_EncryptInit_ex(ctx,NULL,NULL,key,iv)是否会随机化密钥本身,或者我必须这样做。我不想通过2轮PBKDF传递我的密码。这不是必须的。如果你使用密码散列,那么你可以使用随机salt生成一个随机密钥(如果你想要的话,可以使用IV)。我建议使用PBKDF2-HMAC-SHA-256或PBKDF2-HMAC-SHA-512,具体取决于需要多少密钥位;OpenSSL同时支持这两种技术。