2014-03-05 142 views
0

我需要生成java.I RSA密钥对试过以下,错误RSA密钥对生成Java中

<%@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不存在

... ,像这样

专用密钥:[email protected]

公钥:孙RSA公共密钥,2048位模数:

16357206704297604671856121853158662273841275717667103178663872982510600516942159 

92471768797559279747649637039251872720857162699034207744835023844213276461437235 

62716346732316118850882643586149442248236190221255104694771208469870082732902270 

59176928873062588804197238673756206442086637249330898308938378378066971049120606 

00637770477260198883852885925396692544417880794817246467903698369172064896388091 

16103893445868520394887338681032080760488563541369139420725965115593026544388053 

89245256261473050095495300460611881341368409054850562520674680342153131165041561 

752280363820799023393672676767368529573441046320095568301 
public exponent: 65537 

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

回答

-1

您指定的密钥大小为2048位。根据您的需要修改它。

改变这一行

kpg.initialize(2048);

于任何长度,你希望你的关键是(不管长度你的数据库支持)

kpg.initialize(length_of_key);

请检查下面的初始化方法的文档:

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

+0

最小length_of_key应该是512 ...,它也很长...., – user3332171

+0

查看http://keylength.com以查看有关安全密钥大小的更多信息。 512位对您而言可能太大,但它肯定不安全。 –

0

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

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

+0

直接的答案,但我想知道为什么你的数据库需要*小*。普通服务器应该处理这些大小,而不会有太多的麻烦。 –

+0

与加密代码绝对无关。您可能需要一个单独的问题并发布整个堆栈跟踪。 –