Java相当于C ++加密

我有以下用于加密的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(const_cast(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,只是要求相应的包或类将执行相同的操作。

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

不幸的是,openssl文档并不是非常彻底(见这里 )……虽然O’Reilley预订的网络安全与OpenSSL相比要好一些(但它有点过时了)。

一旦你知道需要做什么,你就不应该使用标准的javax.crypto包在Java中编码它。

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

如何用使用AES的openssl命令加密的Java解密文件?

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

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

使用的加密是具有密码块链接的 Triple DES

RSA页面: 来源

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

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

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