Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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
Java 如何加密DER形式的密钥_Java_Encryption_Asn.1_Der - Fatal编程技术网

Java 如何加密DER形式的密钥

Java 如何加密DER形式的密钥,java,encryption,asn.1,der,Java,Encryption,Asn.1,Der,我有一个用于非对称加密的公钥,其形式为DER(可分辨编码规则)编码的二进制数据,这是ASN.1(抽象语法符号1)编码的一种受限形式 2.B/C C C B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B

我有一个用于非对称加密的公钥,其形式为DER(可分辨编码规则)编码的二进制数据,这是ASN.1(抽象语法符号1)编码的一种受限形式

2.B/C C C B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B C C C C C C C C B B B B B B C B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B 8IHRBUughMBP69FYQ4VxQ4+D2EzmmoupQfG4Baggbaggjttblemega1udaqrcmecaeKZD7UWQQGGG7803GJCMF7YGJGJGJGJYMryWf7YGJGYMryWfQdEqEW1CqU5LREhKfSmDaxGhCLTqSrd97YUoWwWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdWdGbQ=

如何加密此密钥以生成文本1234的密码

我从internet上尝试了以下示例代码:

public class ATMPINClient{


    public static void main(String[] args) throws Exception {

        String pkey = "MIIB/DCCAWmgAwIBAgIQpbarEXfe8rVDlWlg2T+ixzAJBgUrDgMCHQUAMBgxFjAUBgNVBAMTDUJBTktESE9GQVIwMDEwIBcNMTMwNzEwMDkxMjU5WhgPMjA5OTEyMjkyMDAwMDBaMBgxFjAUBgNVBAMTDUJBTktESE9GQVIwMDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALZTB/2vKxWwCGhUdywVvikj8klvlzpZTJbVd0bRIN82bTTzp53SDXczc7mkto4vsqelGqnyjZcigyhj5y60SWYggc83d89I+i2Vo77am6aW8tfx1p/x9Op6bDLIN8V0uyoBK8IhRbuiugHmbP69Fyq4vXQ4+D2EzmmOuPRQfg4BAgMBAAGjTTBLMEkGA1UdAQRCMECAEAMkZd7uwQQG7803GjCmF7yhGjAYMRYwFAYDVQQDEw1CQU5LREhPRkFSMDAxghCltqsRd97ytUOVaWDZP6LHMAkGBSsOAwIdBQADgYEAhau3OD9QPoJm+H8v70WQmGUwJaS2IZORo/f8sMgUnVA6qoiD7BRkv8VVT0No4H+77YnYR2mtlCkU1BenKM3bC4WQXsXawMDSOoJcqBVLBFpYzl/8xpNrRyA8yyLUX37kXmH6mdioGLiNSKhQvX/XBYkTeOnsS2umt+zjS2JDS+g=";

        String atmPin = "1234";
        byte[] key = pkey.getBytes();
        encrypt(atmPin, key);


    }

    public static byte[] encrypt(String atmPin, byte[] keyCode)
            throws Exception {
        X509Certificate cert = X509Certificate.getInstance(keyCode);
         RSAPublicKey rk = (RSAPublicKey) cert.getPublicKey();
        System.out.println("Algorithm: " + rk.getAlgorithm());
        System.out.println("Modules : " + rk.getModulus());
        System.out.println("Hex - Modules : " + rk.getModulus().toString(16).toUpperCase());

        System.out.println("Exponent : " + rk.getPublicExponent());
        System.out.println("Name : " + cert.getSubjectDN().getName());
        System.out.println("Issuer Name : " + cert.getIssuerDN().getName());
        System.out.println("Not After : " + cert.getNotAfter());
        System.out.println("Not Before : " + cert.getNotBefore());
        System.out.println("Format : " + cert.getPublicKey().getFormat());
        Cipher cipher = Cipher.getInstance("RSA");

        cipher.init(Cipher.ENCRYPT_MODE, rk);
        System.out.println("Actual PIN : " + atmPin);
        byte[] PIN = cipher.doFinal(atmPin.getBytes("UTF-8"));

        String encPIN = new sun.misc.BASE64Encoder().encode(PIN);
        System.out.println("Encrypted Pin : " + encPIN);

        return PIN;

    }
}
获取以下错误:

    Exception in thread "main" javax.security.cert.CertificateException: InvocationTargetException: javax.security.cert.CertificateException: invalid DER-encoded certificate data
    at javax.security.cert.X509Certificate.getInst(X509Certificate.java:226)
    at javax.security.cert.X509Certificate.getInstance(X509Certificate.java:186)
    at atmpinclient.ATMPINClient.encrypt(ATMPINClient.java:33)
    at atmpinclient.ATMPINClient.main(ATMPINClient.java:26)
Java Result: 1

请告知如何实现此加密。

我可以通过将开始和结束证书附加到公钥来进行加密

String beignKey = "-----BEGIN CERTIFICATE-----"+System.getProperty("line.separator");;
        String pkey = "MIIB/DCCAWmgAwIBAgIQpbarEXfe8rVDlWlg2T+ixzAJBgUrDgMCHQUAMBgxFjAUBgNVBAMTDUJBTktESE9GQVIwMDEwIBcNMTMwNzEwMDkxMjU5WhgPMjA5OTEyMjkyMDAwMDBaMBgxFjAUBgNVBAMTDUJBTktESE9GQVIwMDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALZTB/2vKxWwCGhUdywVvikj8klvlzpZTJbVd0bRIN82bTTzp53SDXczc7mkto4vsqelGqnyjZcigyhj5y60SWYggc83d89I+i2Vo77am6aW8tfx1p/x9Op6bDLIN8V0uyoBK8IhRbuiugHmbP69Fyq4vXQ4+D2EzmmOuPRQfg4BAgMBAAGjTTBLMEkGA1UdAQRCMECAEAMkZd7uwQQG7803GjCmF7yhGjAYMRYwFAYDVQQDEw1CQU5LREhPRkFSMDAxghCltqsRd97ytUOVaWDZP6LHMAkGBSsOAwIdBQADgYEAhau3OD9QPoJm+H8v70WQmGUwJaS2IZORo/f8sMgUnVA6qoiD7BRkv8VVT0No4H+77YnYR2mtlCkU1BenKM3bC4WQXsXawMDSOoJcqBVLBFpYzl/8xpNrRyA8yyLUX37kXmH6mdioGLiNSKhQvX/XBYkTeOnsS2umt+zjS2JDS+g=";

String endKey = System.getProperty("line.separator")+"-----END CERTIFICATE-----" ;


pkey = beignKey + pkey + endKey;

我认为在一个名为rsa Encrypter的类中调用AESUtils.
encrypt
可能与此有关。另外,“无效AES密钥长度”的行可能会促使您考虑为什么RSA加密方法正在讨论AES错误…请阅读您的错误并查看您的代码,投入一点研究工作?我已经更新了我的加密方法,现在我得到了不同的异常,请建议传入完整的X509证书,不仅仅是base64数据。您可以指导我如何操作吗?查找PEM X509证书的内容,并将其与您传递的内容进行比较。