【发布时间】:2014-02-13 14:45:04
【问题描述】:
我想更熟悉 RSA 算法,为此我做了一个小项目。实际上一切正常,我可以正确加密和解密消息,但我不知道我的密钥生成是否正确执行(我的目标是获得一个具有字节数组表示的公钥,我可以为其他部分导出)。
我的密钥是如何生成的:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
random.nextBytes(new byte[128]);
keyGen.initialize(1024, random);
KeyPair keyPair = keyGen.generateKeyPair();
PublicKey pubKey = keyPair.getPublic();
PrivateKey privKey = keyPair.getPrivate();
byte[] publicKeyEncoded = pubKey.getEncoded();
byte[] privateKeyEncoded = privKey.getEncoded();
我的问题是关于 getEncoded 方法,每次执行我的程序时,似乎都会生成一个新的密钥对(根据我的跟踪),但是当我调用这个方法时,我仍然有相同的值,它似乎是固定的。第二次调用该方法时该值会更改,并且每次在我的程序中调用它时都会更改该值,但是如果执行新的执行,则第一个值与前一个执行事件的第一个值相同(如果键)不同。
根据文档,它似乎“以主要编码格式返回密钥......”,我检查了我的密钥格式,它是 X.509,但没有关于所描述行为的任何内容。
你能告诉我更多的细节吗?
【问题讨论】:
-
如果在代码中添加类似
System.out.println("Public Key: " + Hex.toHexString(pubKey.getEncoded()));的内容会怎样?
标签: java rsa public-key asn.1