Android RSA Keypair Generation - 我应该使用标准Java/Bouncy Castle/Spongy Castle/JSch/Other吗?
我已经四处寻找了大约一个星期+来实现我心目中的方法。我遇到(并阅读)了许多关于所有这些不同方法的文章,但我仍然感到困惑,所以我希望也许有人可以传播他们对这些主题的知识,这样我就可以更轻松地创建我追求的方法并在Android中实现它。
我的“追捧”方法:
- 必须生成 RSA 公钥和私钥
- 公众必须具有 PKCS#1 填充
- 必须是 RSA 2048
- 返回字节数组中的公钥
显然,你可以用四种方式去做:
- 标准爪哇
- 充气城堡
- 海绵城堡 (安卓友好?
- 断续器
由于我对安全和整个Java非常陌生,我想知道是否有人可以最终对这一切给出一个很好的明确解释。
以下是我试图在4种不同的编程方法中实现我追求的方法(如上所述)的方法。如果我不知道什么,那是因为我无法通过相应的文档弄清楚。请随时纠正我。
1. 标准 Java(不确定是否为 PKCS#1):
public byte[] returnPublicKeyInBytes() throws NoSuchAlgorithmException {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair keyPair = kpg.genKeyPair();
byte[] pri = keyPair.getPrivate().getEncoded();
byte[] pub = keyPair.getPublic().getEncoded();
return pub;
}
2.充气城堡(尚未功能=/想法?):
public byte[] returnPublicKeyInBytes() throws NoSuchAlgorithmException {
RSAKeyPairGenerator r = new RSAKeyPairGenerator();
r.init(new KeyGenerationParameters(new SecureRandom(),4096));
AsymmetricCipherKeyPair keys = r.generateKeyPair();
CipherParameters pri = keys.getPrivate();
CipherParameters pub = keys.getPublic();
byte[] pubbyte = pub.toString().getBytes();
return pubbyte; //NOT WORKING
}
3.海绵城堡(没有启动它/与充气城堡相同?
4. JSch(非常功能失调/正在处理中)
public byte[] returnPublicKeyInBytes(JSch jSch) {
try {
KeyPair keyPair = KeyPair.genKeyPair(jSch, KeyPair.RSA);
ByteArrayOutputStream bs = new ByteArrayOutputStream();
keyPair.writePrivateKey(bs);
jSch.addIdentity("Generated", bs.toByteArray(), keyPair.getPublicKeyBlob(), null);
return keyPair.getPublicKeyBlob();
} catch (JSchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
我希望这能真正成为任何在Android中RSA密钥生成有问题的人(就像我和许多其他人一样)的资源。
我觉得Bouncy Castle关于它的API的信息很少,这使得初学者(像我一样)很难理解它。根据我的研究,人们使用Java中的Bouncy Castle而不是内置的安全提供程序,因为Bouncy Castle更加强大。在Android中使用充气城堡是不希望的,因为它“附带了充气城堡的残缺版本”,这可能容易出错。海绵城堡只是充气城堡的重新包装。
为此,我将提出最后一个问题,Android应该使用哪种方法?
更新
我希望以后有人能回答这个问题。至于我为解决我的问题所做的只是使用NDK。