2014-03-05 161 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

與加密代碼絕對無關。您可能需要一個單獨的問題併發布整個堆棧跟蹤。 –