0

我需要在 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 不存在

当整个项目运行时,我得到了输出...,但是生成的公钥太长了...,像这样

私钥:sun.security.rsa.RSAPrivateCrtKeyImpl@b8a7c

PublicKey:Sun RSA 公钥,2048 位模数:

16357206704297604671856121853158662273841275717667103178663872982510600516942159

92471768797559279747649637039251872720857162699034207744835023844213276461437235

62716346732316118850882643586149442248236190221255104694771208469870082732902270

59176928873062588804197238673756206442086637249330898308938378378066971049120606

00637770477260198883852885925396692544417880794817246467903698369172064896388091

16103893445868520394887338681032080760488563541369139420725965115593026544388053

89245256261473050095495300460611881341368409054850562520674680342153131165041561

752280363820799023393672676767368529573441046320095568301 
public exponent: 65537

我想将此公钥和私钥插入数据库..,所以它应该很小..,请帮帮我......,

4

2 回答 2

0

对于任何可行的安全性,RSA 密钥根据定义都是很大的。如果您需要更小的密钥,则需要切换到对称加密 (AES) - 如果合适的话 - 或椭圆曲线加密 (ECC)。使用 ECC,您仍然需要使用已知或命名曲线,否则您的密钥仍然很大。

创建较小的 RSA 密钥有一个技巧:让它们在已知状态下使用伪随机数生成器生成(并保存此状态)。然而,这个解决方案依赖于实现细节;如果实现的变化很小,您可能会得到不同的密钥对,因此不建议这样做。希望我可以原谅我在 Stackoverflow 上提到这一切。

于 2014-03-05T08:36:43.157 回答
-1

您将密钥大小指定为 2048 位。根据您的需要对其进行修改。

更改此行

kpg.initialize(2048);

到您希望密钥的任何长度(数据库支持的任何长度)

kpg.initialize(length_of_key);

请查看以下初始化方法的文档:

http://docs.oracle.com/javase/7/docs/api/java/security/KeyPairGenerator.html#initialize(int)

于 2014-03-05T07:01:18.940 回答