我有以下用于加密的 C++ 代码片段:
EVP_CIPHER_CTX ctx;
const EVP_CIPHER * cipher = EVP_des_ede3_cbc();
unsigned char iv[EVP_MAX_IV_LENGTH];
unsigned char key[EVP_MAX_KEY_LENGTH];
String seed;
_config->get_value("crypto_seed", &seed); // uses the seed value from pimp config.
if (seed.is_empty())
{
return false;
}
EVP_BytesToKey(cipher, EVP_sha1(),
(unsigned char *) 0, // no salt
reinterpret_cast<unsigned char *>(const_cast<char *>(seed.chars())), seed.length(),
1, // hash passphrase just once.
key, iv);
EVP_CIPHER_CTX_init(&ctx);
EVP_CipherInit_ex(&ctx, cipher, (ENGINE *) 0, key,
iv,
1); // encrypt
java中的C++加密相当于什么?
我看到有des
算法,然后我明白了sha1
.
这与openssl加密有关。但不确定什么是等价物。本质上我想要与 C++ 代码生成的输出相同的输出。
我问的是相当于什么EVP_CIPHER_CTX
或者这里使用的加密的名称是什么,这样我就可以从那里获取它。
编辑:不要求任何人将代码转换为java,只要求相应的包或类可以做同样的事情。
其中最棘手的部分是 EVP_BytesToKey 部分,它之前已重新创建。
如何使用AES解密使用openssl命令加密的Java文件? https://stackoverflow.com/questions/11783062/how-to-decrypt-an-encrypted-file-in-java-with-openssl-with-aes
如果您真的不适合使用类似 C 的代码,我这里还提供了一个面向对象的版本。对于 SHA-1,请使用 SHA-1 而不是 MD5...
至于加密,只需使用"DESede/CBC/PKCS5Padding"
作为你的算法名称Cipher.getInstance()
方法,你应该没问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)