簡體   English   中英

java:RSA加密中公鑰中的通用模式

[英]java : Common pattern in public keys in RSA encryption

我開始注意到,我在Java中生成的公鑰在打印時在開頭和結尾都有共同的重復或模式。

這些是我生成的公鑰,當我嘗試以字符串格式打印時,它們是以下形式:

這是我用來生成密鑰的代碼:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.generateKeyPair();
PublicKey pub = kp.getPublic();
PrivateKey pvt = kp.getPrivate();

byte[] encodedPublicKey = pub.getEncoded();
String b64PublicKey = Base64.getEncoder().encodeToString(encodedPublicKey);
System.out.println(b64PublicKey);

第一個公鑰:

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAluBZlkmIH0GCt3z8B/y7PFECBKdlkRHZeGA/OOBOM/RNvBU+kyccN1TcDxeA/YmoOWUy8JuOj14Iv600mdmWAPUkm56w780o+7Ev8V9c6FLtyCcBI0bVknJTdGopaZRa1GgU11tivmBcPp6qpRodtVoBjBuWYatSDXyuso20yNGSm4muSsysFRsbpm236lmjk7T2nM8Rlv4LmjMlm63dhLJxCK2lB8guf7pCZFx/OPe32lXTBADx0Ci/DJfrgA1KhKVtzOttnS5/TfOLHIkfJ5CZj/oThQ/zfkc4Y5Qz/7XFz/KV9xeyZdKDVBMsf/Ib11X5w9pGmwlJUbeq08RqHwIDAQAB

第二個:

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiza6s7dpiMkh1T+W8bvgpbZXJxMm0W19PaDy2z1rEkjuIxOzp1WqVbEBrBWjiaH6HhN6sN60gTYxZF5mmRNFKQjc5ElOzY4/vnvi2NrUQpJudWR8SZetU0zFIurgUca7mM8WqMBOv6Blg8A25PfJrxDekmtbnAf3DFlRxvJTfqd6d4WAhVn1WoT9ce6DkRZJ8t73IgujcRlquVg2pTFO0wqN7xFzoQ70dPww243mQTzyJlcLmEkqAJi3xSyh8vFtgEM/jY1YwqQ5yjBqC1U55CiChuoNZ6g6obHC5G8sOOmWYr4dnDp2w8hNl7LssTexMOmCCd3cyue71FcsQk0LtQIDAQAB

這些模式是什么意思?在公共密鑰的開頭使用這樣的模式是否安全?它們會帶來漏洞嗎?

正如評論中已經指出的那樣:這些密鑰是公共密鑰的二進制編碼。 公用密鑰至少由模數和公用指數組成,因此需要某種結構。 對於密碼學,這些組件通常使用ASN.1表示法進行描述,並使用BER / DER編碼進行編碼。

通常,對於不同的值,ASN.1 BER編碼將迅速變得不同,因為它們包含長度編碼。 但是,RSA公鑰不是這種情況,因為模數和公共指數將始終是相同的大小。 對於每個密鑰對,唯一的模數可能會改變值(如果不是,則隨機數生成器會損壞)。

Java中的公共密鑰使用X.509證書規范中的SubjectPublicKeyInfo結構。 與通常的PKCS#1編碼相比,優點在於它在開始時包含一個對象標識符表明它是RSA公鑰。 因此,可以檢查該對象標識符以確保它確實是RSA公鑰。

為了快速瀏覽結構,請在對基數64進行解碼后使用openssl -inform DER 。您也可以使用一些在線工具(例如工具)來查看公鑰結構的內容。 當然,僅將公用密鑰和測試密鑰用於在線工具。

通常,值30 8x是任何具有顯着大小的ASN.1結構的開始。 30是一個SEQUENCE,通常是多個元素的結構所需要的,而8是長度編碼的開始。 因此,以MI開頭的base 64中的任何內容都可能以ASN.1 BER / DER編碼,因為MI編碼了前12位。

暫無
暫無

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

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