1. 程式人生 > >Java中使用OpenSSL RSA公私鑰進行資料加解密儲存

Java中使用OpenSSL RSA公私鑰進行資料加解密儲存

使用openSSL 生成公私鑰可以參考作者 JackCousins 的文章 @http://blog.csdn.net/chaijunkun/article/details/7275632 寫的非常好,鼓掌
但在使用的過程中發現 ,例如 我在手機中可以使用公鑰簽名,伺服器daunting使用私鑰解密,在這個過程中需要傳遞資料,那麼就是string型別的,故我們可以稍微改一下 程式碼如下  ,做個筆記標記一下
    private PrivateKey getPrivateKey() throws Exception {
        InputStream fis = new FileInputStream(new File("pkcs8_rsa_private_key.pem"));
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
        String key = br.readLine();
        br.close();
        fis.close();
        BASE64Decoder base64Decoder = new BASE64Decoder();
        byte[] buffer = base64Decoder.decodeBuffer(key);
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(buffer);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        return keyFactory.generatePrivate(keySpec);

    }

    private PublicKey getPublicKey() throws Exception {
        InputStream fis = new FileInputStream(new File("rsa_public_key.pem"));
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
        String key = br.readLine();
        br.close();
        fis.close();
        BASE64Decoder base64Decoder = new BASE64Decoder();
        byte[] buffer = base64Decoder.decodeBuffer(key);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);
        return keyFactory.generatePublic(keySpec);
    }

    private String encryptByPublicKey(PublicKey publicKey, byte[] data) throws Exception {
        //        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        BASE64Encoder base64Encoder = new BASE64Encoder();
        return base64Encoder.encode(cipher.doFinal(data, 0, data.length));
    }

    public String decrypt(String cipherData) throws Exception {
        Cipher cipher = null;
        cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, getPrivateKey());
        BASE64Decoder base64Decoder = new BASE64Decoder();
        byte[] output = cipher.doFinal(base64Decoder.decodeBuffer(cipherData));
        return new String(output);

    }

    public String encode(String text) {
        byte[] data = text.getBytes();
        String value = null;
        try {
            value = new String(encryptByPublicKey(getPublicKey(), data));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return value;
    }

    public static void main(String[] args) throws Exception {
        HttpRSAUtil httpRSAUtil = new HttpRSAUtil();
        String encoder = httpRSAUtil.encryptByPublicKey(httpRSAUtil.getPublicKey(),
                "123456".getBytes());
        System.out.println(encoder);
        System.err.println(httpRSAUtil.decrypt(encoder));
        //        encryptByPublicKey
    }


相關推薦

Java使用OpenSSL RSA公私進行資料解密儲存

使用openSSL 生成公私鑰可以參考作者 JackCousins 的文章 @http://blog.csdn.net/chaijunkun/article/details/7275632 寫的非常好,鼓掌 但在使用的過程中發現 ,例如 我在手機中可以使用公鑰簽名,伺服器

Java使用OpenSSL生成的RSA公私進行資料解密

RSA是什麼:RSA公鑰加密演算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美國麻省理工學院)開發的。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密演算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公

Java使用OpenSSL生成的RSA公私資料進行解密

Java基於OpenSSL的公私鑰對資料進行加解密 使用OpenSSL來生成私鑰和公鑰 RSA加密解密工具類 簽名及校驗類 測試類 使用OpenSSL來生成私鑰和公鑰

和私的含義,以及java客戶端和伺服器之間進行安全解密的簡單實現

所謂公鑰和私鑰,一般是指在一個伺服器中,每個伺服器各自有自己的公鑰和私鑰,私鑰絕對保密,不可洩露,而公鑰會提供給可以被訪問的伺服器知曉。 如果serverA和serverB進行資料互動 那麼ServerA會知道B的公鑰 在傳送資料時 資料內容使用B的公鑰加密,傳送給B 數字

UNIX下利用OpenSSL對大檔案進行AES解密

      由於專案需要檔案傳輸過程中對其進行加解密,所以就在網上查詢下加解密的相關介紹,最開始採用RSA加解密演算法,先是利用RSAEuro折騰了半天編譯的環節卡住了(編譯報錯查不出原因),後面網上發現利用OpenSSL的實現方法比較簡單。       OpenSSL

java程式碼生成相容openssl可用的rsa公私,pkcs8轉換pkcs1,

java預設的KeyPairGenerator生成的rsa 公私鑰不能直接被openssl來使用 java生成的私鑰是pkcs8 格式 公鑰是x.509格式 openssl生成和使用的是pkcs1格式,pem公私鑰檔案,所以需要轉換 本專案可以動態生成openssl相容的,o

java生成RSA公私字串,簡單易懂

java生成RSA公私鑰字串,簡單易懂   解決方法: 1.下載bcprov-jdk16-140.jar包,參考:http://www.yayihouse.com/yayishuwu/chapter/1537 2.java程式碼 KeyPairGenerator

openssl從記憶體讀取RSA

背景:近期需要在專案中進行RSA簽名驗證,廠商會給出pem格式的RSA公鑰。在以往專案中使用openssl讀取RSA公鑰時基本都是從pem檔案中讀取,基本沒什麼問題,可最近由於專案需要需要從資料庫中讀取RSA公鑰,經查資料發現openssl提供了bio介面以支援各種形式的祕

Java利用RSA演算法進行加密解密

首先需要兩個工具類 package cnsts.common.utils; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; i

JAVA使用log4j及slf4j進行日誌輸出的方法

cto 所在 inf 官方 pat etl 註意 actor 結果   JAVA中輸出日誌比較常用的是log4j,這裏講下log4j的配置和使用方法,以及slf4j的使用。 一、下載log4j的架包,並導入項目中,如下: 二、創建log4j.prope

Python rsa公私生成 rsa加密(分段加密)私簽實戰

you port pen man length comment 數據加密 自己 keygen 一般現在的SAAS服務提供現在的sdk或api對接服務都涉及到一個身份驗證和數據加密的問題。一般現在普遍的做法就是配置使用非對稱加密的方式來解決這個問題,你持有SAAS公司的公鑰,

openssl 生成公私

執行命令 格式 pk8 轉換 php public key inf nbsp 1、生成私鑰pem, 執行命令openssl genrsa -out rsa_private_key.pem 1024 2、生成公鑰,執行命令openssl rsa -in rsa_priva

php openssl_sign() 語法+RSA公私加密解密,非對稱加密演算法詳解

其實有時候覺得寫部落格好煩,就個函式就開篇部落格。很小的意見事情而已,知道的人看來多取一舉,或者說沒什麼必要,浪費時間,不知道的人就會很鬱悶。技術就是這樣的,懂的人覺得真的很簡單啊,不知道的人真的好難。。。 一般在跟第三方介面對接資料的時候,為了保證很多都使用的RSA簽名,沒性趣瞭解的同學只需要

Java使用JWT生成Token進行介面鑑權實現

先介紹下利用JWT進行鑑權的思路: 1、使用者發起登入請求。 2、服務端建立一個加密後的JWT資訊,作為Token返回。 3、在後續請求中JWT資訊作為請求頭,發給服務端。 4、服務端拿到JWT之後進行解密,正確解密表示此次請求合法,驗證通過;解密失敗說明Token無效或者已過期。 流程圖如下:

利用SHA-1演算法和RSA進行簽名驗籤(帶註釋)

  背景介紹 1、SHA 安全雜湊演算法SHA (Secure Hash Algorithm)是美國國家標準和技術局釋出的國家標準FIPS PUB 180-1,一般稱為SHA-1。其對長度不超過264二進位制位的訊息產生160位的訊息摘要輸出,按512位元塊處理其輸入。 SHA是一種資料加密

JavaLamda表示式對List進行排序

public class MainTest { public static void main(String[] args) { List<String> list = Arrays.asList( "2018121207","2018121206","2018121

RSA公私生成和RSA證書建立”利器”

一.建立pkcs8格式的RSA私鑰和和公鑰 步驟如下: 1.生成 RSA 私鑰 openssl genRSA -out RSAprivatekey.pem 1024 2.生成對應的公鑰 openssl RSA -in RSAprivatekey.pem -pubout -out RSApublic

[openssl] 生成公私檔案

OpenSSL> genrsa -out app_private_key.pem 1024 #生成 1024位 私鑰,2048 生成 2048 位祕鑰 OpenSSL>

生成rsa 公私

生成私鑰 openssl genrsa -out rsa_private.key 1024 私鑰(pkcs1) openssl rsa -in rsa_private.key -pubou

NetCore 生成RSA公私對,公加密私解密,私加密公解密

using Newtonsoft.Json; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Encodings; using Org.BouncyCastle.Crypto.Engines; using Org.BouncyCastl