AES/CBC/PKCS5P在java中添加加密在ruby中解密
我试图用java加密数据,用ruby解密数据 我发现几乎相同的问题,但我的情况有点不同AES/CBC/PKCS5P在java中添加加密在ruby中解密,java,ruby,aes,Java,Ruby,Aes,我试图用java加密数据,用ruby解密数据 我发现几乎相同的问题,但我的情况有点不同 我的代码是。。。 用java加密 import java.util.HashMap; import java.util.Map; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySp
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import net.sf.json.JSONObject;
import org.apache.commons.codec.binary.Hex;
class Crypt {
public static void main(String[] args) throws Exception {
Map<String, String> node = new HashMap<String, String>();
node.put("timestamp", "1377499097199");
JSONObject jsonObject = JSONObject.fromObject(node);
String json = jsonObject.toString();
System.out.println(json);
//key
String skeyString = "97128424897797a166913557a6f4cc8e";
byte[] skey = Hex.decodeHex(skeyString.toCharArray());
System.out.println("key : " + skeyString);
//iv
String ivString = "84e8c3ea8859a0e293941d1cb00a39c3";
byte[] iv = Hex.decodeHex(ivString.toCharArray());
System.out.println("iv : " + ivString);
//encrypt
SecretKeySpec skeySpec1 = new SecretKeySpec(skey, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec1, new IvParameterSpec(iv));
byte[] encrypted = cipher.doFinal(json.getBytes());
String encryptedString = Hex.encodeHexString(encrypted);
System.out.println("=============>");
System.out.println("encrypted string: " + encryptedString);
}
}
我希望用Ruby解密(加密字符串)
Ruby代码是…(得到错误)
但它返回错误
`final': bad decrypt (OpenSSL::Cipher::CipherError)
我认为问题在于密码、填充和密钥类型/iv。
但我不知道如何完成ruby代码
请让我知道如何完成此代码
谢谢。您的Ruby代码有两个问题 首先,当您应该使用AES 128时,您正在使用AES 256。Java根据您使用的密钥大小使用AES 128或256,您使用的是128位密钥 其次,您需要对Ruby中的
密钥
、iv
和加密字符串
值进行十六进制解码。OpenSSL密码需要的是二进制字符串,而不是十六进制字符串
require 'openssl';
key = "97128424897797a166913557a6f4cc8e";
iv = "84e8c3ea8859a0e293941d1cb00a39c3";
encrypted_string = "395f6c0e8ad27f57c4a5a8975aa633e5b26f288d37ce18c6971779951f3b3527";
de_cipher = OpenSSL::Cipher::Cipher.new("AES-128-CBC");
de_cipher.decrypt;
de_cipher.key = [key].pack('H*');
de_cipher.iv = [iv].pack('H*');
puts de_cipher.update([encrypted_string].pack('H*')) << de_cipher.final;
请你也帮我用ruby加密,还是告诉我gem的名字
{"timestamp":"1377499097199"}
`final': bad decrypt (OpenSSL::Cipher::CipherError)
require 'openssl';
key = "97128424897797a166913557a6f4cc8e";
iv = "84e8c3ea8859a0e293941d1cb00a39c3";
encrypted_string = "395f6c0e8ad27f57c4a5a8975aa633e5b26f288d37ce18c6971779951f3b3527";
de_cipher = OpenSSL::Cipher::Cipher.new("AES-128-CBC");
de_cipher.decrypt;
de_cipher.key = [key].pack('H*');
de_cipher.iv = [iv].pack('H*');
puts de_cipher.update([encrypted_string].pack('H*')) << de_cipher.final;
{"timestamp":"1377499097199"}