Java相当于C ++加密

时间:2012-10-16 18:02:41

标签: java c++ encryption openssl

我有以下用于加密的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,只是询问相应的包或类也会这样做。

4 个答案:

答案 0 :(得分:2)

最棘手的部分是EVP_BytesToKey部分,之前已经重新创建过。

How to decrypt file in Java encrypted with openssl command using AES?

如果您真的不习惯使用类似C的代码,那么我还有一个面向对象的版本。对于SHA-1,使用SHA-1而不是MD5 ...

对于加密,只需使用"DESede/CBC/PKCS5Padding"作为Cipher.getInstance()方法的算法名称,您应该没问题。

答案 1 :(得分:0)

正在使用的加密是Triple DES cipher block chaining

RSA页面:source

  

加密标识符,表示3DES EDE CBC对称   密码。

答案 2 :(得分:0)

看起来EVP_CIPHER_CTX是包含加密的“上下文”结构(类似于对象),但实际使用的密码是EVP_des_ede3_cbc - 这将是“des-ede3-cbc” “与OpenSSL.encrypt(…)和朋友

编辑:要回答问题(“相应的包”),通常你应该使用javax.crypto或(可能“更好”用于大多数目的)bouncycastle(http://www.bouncycastle .org等/)。但OpenSSL绑定也存在 - 只是难以使用和部署。

答案 3 :(得分:0)

您要转换的代码使用openssl库。它使用初始向量执行三重DES加密。你需要了解的第一件事就是它正在做什么(最好是为什么)。

不幸的是,openssl文档并不十分彻底(参见here)...虽然O'Reilley的书使用OpenSSL的网络安全相当好一些(它有点过时了)但是,日期)。

一旦你知道需要做什么,使用标准的javax.crypto包在Java中编写它就不会有太大困难。