簡體   English   中英

如何使用java為tor洋蔥服務生成有效的私有(RSA 1024)密鑰?

[英]How generate a valid private (RSA 1024) key for a tor onion service using java?

我正在嘗試為java中的tor洋蔥服務生成有效的私鑰。 使用此私鑰我想獲得一個有效的.onion地址。

我已經運行了下面代碼的各種組合(使用此位/沒有該位)

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey privateKeyGenerated = keyPair.getPrivate();

KeyFactory keyFactory =  KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKeyGenerated.getEncoded()));

Base64.Encoder encoder = Base64.getEncoder();
String privateKeyEncoded = encoder.encodeToString(privateKey.getEncoded());

String fileName = "{{where I'm wanting to store the file}}";    
Writer writer = new FileWriter(fileName);
writer.write("-----BEGIN RSA PRIVATE KEY-----\n");
writer.write(privateKeyEncoded);
writer.write("\n-----END RSA PRIVATE KEY-----\n");
writer.close();

生成后,我將密鑰復制到我的/ var / lib / tor / hidden_​​service / private_key ,刪除任何關聯的主機名並啟動tor服務。 在日志中我收到錯誤:

TLS error: wrong tag (in asn1 encoding routines:ASN1_CHECK_TLEN:---)
TLS error: nested asn1 error (in asn1 encoding routines:ANS1_D2I_EX_PRIMITIVE:---) 
TLS error: nested asn1 error (in asn1 endoding routines:ASN1_TEMPLATE_NOEXP_D2I:---) 
TLS error: RSA lib (in rsa routines:OLD_RSA_PRIV_DECODE:---)

如果生成的.onion地址生成,則不起作用。

如何生成有效的私鑰?

解決方案:使用BEGIN PRIVATE KEY更改BEGIN RSA PRIVATE KEY

Java對密鑰IN PKCS#8格式進行編碼

PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKeyGenerated.getEncoded()));

但是您正在生成一個帶有標題的PEM文件-----BEGIN RSA PRIVATE KEY-----保留給PKCS#1密鑰(舊格式但很常見),而.onion假設它是pkcs1時它真的是pkcs8。 看到錯誤

TLS error: RSA lib (in rsa routines:OLD_RSA_PRIV_DECODE:---)

所以你需要使用PCKS#8標題-----BEGIN PRIVATE KEY-----

另請參見此文章在Java中加載RSA私鑰(algid parse錯誤,而不是序列)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM