Pin*_*ain 5 java cryptography public-key-encryption diffie-hellman
我正在java中为现有程序编写测试工具.作为其中的一部分,我需要生成一个Diffie Hellman密钥对,并以其原始(即未编码的字节)形式将公钥传递给另一个程序.
我可以使用以下代码成功使用密钥对:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("DiffieHellman");
kpg.initialize(512);
KeyPair dkp = kpg.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法检索键的原始字节值:-(调用dkp.getPublic().getEncoded()返回一个字节数组,但它的键是x509编码格式.
我有三种可能的前进方式:
但我不知道如何去做任何一个(哪个会变得最好)?
任何帮助或建议将不胜感激!
你可以得到这样的X和Y(where Y = G^X mod P)值:
BigInteger x = ((javax.crypto.interfaces.DHPrivateKey) dkp.getPrivate()).getX();
BigInteger y = ((javax.crypto.interfaces.DHPublicKey) dkp.getPublic()).getY();
Run Code Online (Sandbox Code Playgroud)
您可以从公钥或私钥获取G和P值,如下所示:
DHParameterSpec params =
((javax.crypto.interfaces.DHPublicKey) dkp.getPublic()).getParams();
BigInteger p = params.getP();
BigInteger g = params.getG();
Run Code Online (Sandbox Code Playgroud)
从那里你可以将它们全部作为原始字节数组:
byte[] xBytes = x.toByteArray();
byte[] yBytes = y.toByteArray();
byte[] pBytes = p.toByteArray();
byte[] gBytes = g.toByteArray();
Run Code Online (Sandbox Code Playgroud)
公共密钥是Y,P和G的组合.X应该保密.
| 归档时间: |
|
| 查看次数: |
2239 次 |
| 最近记录: |