Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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 RSA密钥的结构_Java_Encryption_Rsa_Pkcs#8 - Fatal编程技术网

Java RSA密钥的结构

Java RSA密钥的结构,java,encryption,rsa,pkcs#8,Java,Encryption,Rsa,Pkcs#8,我试图理解公钥和私钥的结构。我生成RSA密钥对: Cipher cipher = Cipher.getInstance("RSA/NONE/PKCS1Padding", "BC"); SecureRandom random = new SecureRandom(); KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "BC"); generator.in

我试图理解公钥和私钥的结构。我生成RSA密钥对:

        Cipher cipher = Cipher.getInstance("RSA/NONE/PKCS1Padding", "BC");
        SecureRandom random = new SecureRandom();
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "BC");
        generator.initialize(2048, random);
        KeyPair pair = generator.generateKeyPair();         
        Key publicKey = pair.getPublic();
        Key privateKey = pair.getPrivate();             
        System.out.println("publicKey : " + byteArrayToHexString(publicKey.getEncoded()));          
        System.out.println("privateKey : " + byteArrayToHexString(privateKey.getEncoded()));                    
我使用ASN.1解码器来探索生成密钥的结构,我发现私钥结构包含公钥结构的所有元素。为什么?


PKCS8 RSA privatekey包含这些字段的原因很简单,因为它(对于RSA)使用了1990年左右由RSA原始标准PKCS1定义的语法,PKCS1现在更方便地作为RFCs 2437 3447和8107在第11.1.2节或a.1.2节中定义,具体取决于版本

是的,有一些冗余:n可以很容易地从pxq重新计算,d mod p-1和q-1都可以很容易地从d重新计算,反之亦然,d mod p-1和q-1,更不用说d或e可以从另一个给定的p和q计算。为什么当时的RSA实验室选择存储我不知道的所有东西——特别是因为在ASN.1中,让事情变得可选相对容易,而在其他一些PKC中(尽管是在以后?)他们做到了这一点

值得一提的是,大致同步的PGP格式不存储d mod p-1和q-1,而是使用p逆mod q,而不是相反。但对于所有算法,PGP都在公钥后附加了“secretkey”(真正的privatekey),因此它同时具有n和p、q以及d和e


尽管在代码中遇到了这些问题,但这并不是真正的编程问题,如果您想继续,我建议您改为使用crypto.stackexchange.com。

PKCS8 RSA privatekey包含这些字段的原因很简单,因为它(对于RSA)使用了RSA原始标准PKCS1在1990年左右定义的语法,现在可更方便地作为RFCs 2437 3447和8107在第11.1.2节或A.1.2节中提供,具体取决于版本

是的,有一些冗余:n可以很容易地从pxq重新计算,d mod p-1和q-1都可以很容易地从d重新计算,反之亦然,d mod p-1和q-1,更不用说d或e可以从另一个给定的p和q计算。为什么当时的RSA实验室选择存储我不知道的所有东西——特别是因为在ASN.1中,让事情变得可选相对容易,而在其他一些PKC中(尽管是在以后?)他们做到了这一点

值得一提的是,大致同步的PGP格式不存储d mod p-1和q-1,而是使用p逆mod q,而不是相反。但对于所有算法,PGP都在公钥后附加了“secretkey”(真正的privatekey),因此它同时具有n和p、q以及d和e


尽管在代码中遇到了这种情况,但这并不是真正的编程问题,如果您想继续这样做,我建议您改为使用crypto.stackexchange.com。

不要嵌入或链接到文本图像。只需复制并粘贴到你的问题中。如果你问为什么公开和私有RSA密钥都包含公开指数和模,那么你真的应该读一下RSA是如何工作的。只是好奇:你用过解码ASN.1吗?还有,@Andrey,在读RSA的时候,一定要看看上面评论者的用户名指的是什么:-)不要嵌入或链接到文本图像。只需复制并粘贴到你的问题中。如果你问为什么公开和私有RSA密钥都包含公开指数和模,那么你真的应该读一下RSA是如何工作的。只是好奇:你用过解码ASN.1吗?还有,@Andrey,在读RSA的时候,一定要看看上面评论者的用户名指的是什么:-)