Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AES/CBC/PKCS5P在java中添加加密在ruby中解密_Java_Ruby_Aes - Fatal编程技术网

AES/CBC/PKCS5P在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

我试图用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.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"}