久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

從字符串創建 RSA 公鑰

Creating RSA Public Key From String(從字符串創建 RSA 公鑰)
本文介紹了從字符串創建 RSA 公鑰的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我使用 1024 RSA 生成了這個測試公鑰,然后在另一個編碼平臺中將其編碼為 DER 和 Base64.我將密鑰復制到 Android/Eclipse 中的字符串中,并嘗試使用 KeyFactory 將其轉換為公鑰.無論我嘗試什么,它都會一直給我一個 InvalidKeySpecException .任何建議都將不勝感激.

I've generated this test public key using 1024 RSA and then encoded it to DER and Base64 in another coding platform. I copied the key into a string in Android/Eclipse and I am trying to turn it into a public key using KeyFactory. It just keeps giving me an InvalidKeySpecException no matter what I try. Any advice at all would be appreciated.

     private void prepKeys() {
         String AppKeyPub = "MIGHAoGBAOX+TFdFVIKYyCVxWlnbGYbmgkkmHmEv2qStZzAFt6NVqKPLK989Ow0RcqcDTZaZBfO5" +
"5JSVHNIKoqULELruACfqtGoATfgwBp4Owfww8M891gKNSlI/M0yzDQHns5CKwPE01jD6qGZ8/2IZ" +
"OjLJNH6qC9At8iMCbPe9GeXIPFWRAgER";

        // create the key factory          
            try {
                KeyFactory kFactory = KeyFactory.getInstance("RSA");  
                // decode base64 of your key
                byte yourKey[] =  Base64.decode(AppKeyPub,0);
                // generate the public key
                X509EncodedKeySpec spec =  new X509EncodedKeySpec(yourKey);
                PublicKey publicKey = (PublicKey) kFactory.generatePublic(spec);

            System.out.println("Public Key: " + publicKey);  

            } catch (Exception e) {
                // TODO Auto-generated catch block  
                e.printStackTrace(); 
            }

         }

推薦答案

您擁有的密鑰是 PKCS#1 格式,而不是 Java 接受的 SubjectPublicKeyInfo 結構.PKCS#1 只是 RSA 參數的編碼,缺少諸如算法標識符之類的東西.SubjectPublicKeyInfo 在內部使用 PKCS#1 - 無論如何都用于 RSA 公鑰.

The key you have is in PKCS#1 format instead of SubjectPublicKeyInfo structure that Java accepts. PKCS#1 is the encoding of the RSA parameters only and lacks things such as an algorithm identifier. SubjectPublicKeyInfo uses PKCS#1 internally - for RSA public keys anyway.

由于 PKCS#1 公鑰位于 SubjectPublicKeyInfo 結構的末尾,因此可以簡單地為字節添加前綴,以便它們成為 RSA SubjectPublicKeyInfo.該解決方案更易于執行,無需額外的庫,例如 Bouncy Castle.因此,如果您需要不使用外部庫,那么您可以查看我的答案此處.

As the PKCS#1 public key is at the end of the SubjectPublicKeyInfo structure it is possible to simply prefix the bytes so that they become an RSA SubjectPublicKeyInfo. That solution is easier to perform without additional libraries such as Bouncy Castle. So if you need to go without an external library then you may have a look at my answer here.

或者,可以編寫一個簡單的 BER 解碼器,將結構解碼為兩個 BigInteger 值.結構本身并不復雜但BER/DER長度編碼需要一些時間來適應.

Alternatively a simple BER decoder could be written to decode the structure into the two BigInteger values. The structure itself is not that complicated but the BER/DER length encoding takes some getting used to.

不過,您也可以使用 Bouncy Castle(輕量級 API)來解決您的問題:

However, you can also use Bouncy Castle (lightweight API) to solve your issues:

String publicKeyB64 = "MIGHAoGBAOX+TFdFVIKYyCVxWlnbGYbmgkkmHmEv2qStZzAFt6NVqKPLK989Ow0RcqcDTZaZBfO5"
        + "5JSVHNIKoqULELruACfqtGoATfgwBp4Owfww8M891gKNSlI/M0yzDQHns5CKwPE01jD6qGZ8/2IZ"
        + "OjLJNH6qC9At8iMCbPe9GeXIPFWRAgER";
// ok, you may need to use the Base64 decoder of bouncy or Android instead
byte[] decoded = Base64.getDecoder().decode(publicKeyB64);
org.bouncycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(decoded);
BigInteger modulus = pkcs1PublicKey.getModulus();
BigInteger publicExponent = pkcs1PublicKey.getPublicExponent();
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent);
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey generatedPublic = kf.generatePublic(keySpec);
System.out.printf("Modulus: %X%n", modulus);
System.out.printf("Public exponent: %d ... 17? Why?%n", publicExponent); // 17? OK.
System.out.printf("See, Java class result: %s, is RSAPublicKey: %b%n", generatedPublic.getClass().getName(), generatedPublic instanceof RSAPublicKey);

正如您所見,它實際上只需要一個類作為接口,盡管這當然得到了 Bouncy Castle 中整個 ASN.1/BER 解碼器功能的支持.

As you can see it actually only requires a single class as interface, although that is of course backed up with the entire ASN.1/BER decoder functionality within Bouncy Castle.

請注意,可能需要將 Base 64 解碼器更改為 Android 特定的一個(android.util.Base64).此代碼已在等效的 Java 運行時測試.

Note that it may be required to change the Base 64 decoder to the Android specific one (android.util.Base64). This code was tested on an equivalent Java runtime.

這篇關于從字符串創建 RSA 公鑰的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How to wrap text around components in a JTextPane?(如何在 JTextPane 中的組件周圍環繞文本?)
MyBatis, how to get the auto generated key of an insert? [MySql](MyBatis,如何獲取插入的自動生成密鑰?[MySql])
Inserting to Oracle Nested Table in Java(在 Java 中插入 Oracle 嵌套表)
Java: How to insert CLOB into oracle database(Java:如何將 CLOB 插入 oracle 數據庫)
Why does Spring-data-jdbc not save my Car object?(為什么 Spring-data-jdbc 不保存我的 Car 對象?)
Use threading to process file chunk by chunk(使用線程逐塊處理文件)
主站蜘蛛池模板: 国产精品国产精品国产专区不卡 | 天堂久久网 | 日本黄色影片在线观看 | 日本黄色片免费在线观看 | 国产露脸国语对白在线 | 久久久久久国产精品免费免费狐狸 | 亚洲三区视频 | 亚洲福利免费 | 北条麻妃国产九九九精品小说 | 久久国产日韩欧美 | 最新国产精品视频 | 国产精品免费小视频 | 久久这里只有精品首页 | 91久久久久久 | 成年女人免费v片 | 亚洲欧美在线观看 | 亚洲国产一区二区三区在线观看 | 国产一区二区免费在线 | 亚洲一区二区中文字幕在线观看 | 中文字幕在线欧美 | 亚洲精品久久久久久一区二区 | 免费高潮视频95在线观看网站 | 日本在线小视频 | 艹逼网| 黄色大片免费看 | 在线成人 | av三级 | 久久成人免费 | 国产探花在线精品一区二区 | 国产高清一区二区 | 免费在线观看一区二区三区 | 日韩超碰 | 亚洲国产一区在线 | 亚洲精品成人免费 | 久久久久中文字幕 | 精品国产欧美日韩不卡在线观看 | 中文字幕乱码视频32 | 91色视频在线观看 | 亚洲国产乱码 | 日韩蜜桃视频 | 久久成人在线视频 |