我需要在java中生成RSA密钥对。我尝试了以下内容,
<%@page import="java.security.Key"%>
<%@page import="java.security.KeyPair"%>
<%@page import="java.security.KeyPairGenerator"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.genKeyPair();
Key publicKey = kp.getPublic();
Key privateKey = kp.getPrivate();
out.println("PrivateKey:" + privateKey);
out.println("PublicKey:" +publicKey);
%>
</body>
</html>
当页面在netbeans中运行时(仅此页面)发生错误。,错误:包
sun.org.mozilla.javascript.internal.regexp不存在
当整个项目运行时我得到了输出...,但生成的公钥太长了......,就像这样
PrivateKey:sun.security.rsa.RSAPrivateCrtKeyImpl@b8a7c
PublicKey:Sun RSA公钥,2048位模数:
16357206704297604671856121853158662273841275717667103178663872982510600516942159
92471768797559279747649637039251872720857162699034207744835023844213276461437235
62716346732316118850882643586149442248236190221255104694771208469870082732902270
59176928873062588804197238673756206442086637249330898308938378378066971049120606
00637770477260198883852885925396692544417880794817246467903698369172064896388091
16103893445868520394887338681032080760488563541369139420725965115593026544388053
89245256261473050095495300460611881341368409054850562520674680342153131165041561
752280363820799023393672676767368529573441046320095568301
public exponent: 65537
我想将此公钥和私钥插入数据库..,所以它应该很小.., 请帮帮我......,
答案 0 :(得分:0)
对于任何可行的安全性,RSA密钥都很大。如果您需要较小的密钥,则需要切换到对称加密(AES) - 如果适用 - 或椭圆曲线加密(ECC)。使用ECC,您仍然需要使用已知或命名的曲线,否则您的密钥仍然很大。
创建较小的RSA密钥有一个技巧:让它们使用处于已知状态的伪随机数生成器生成(并保存此状态)。然而,该解决方案依赖于实现细节;如果实现只是稍微改变,你可能会得到一个不同的密钥对,所以不建议这样做。希望我可以原谅在Stackoverflow上提及它。
答案 1 :(得分:-1)
您将密钥大小指定为2048位。根据您的需要进行修改。
更改此行
kpg.initialize(2048);
到你想要密钥的任何长度(数据库支持的长度)
kpg.initialize(length_of_key);
请查看以下初始化方法的文档:
http://docs.oracle.com/javase/7/docs/api/java/security/KeyPairGenerator.html#initialize(int)