ZZ:OpenSSL中產生RSA KEY以及讀取PEM檔案的問題
原文搬家了,就算從這裡轉的吧:
ZZ from: http://blog.csdn.net/lazyclough/article/details/7646696
產生openssl RSA Key的命令:
openssl genrsa -out private.key 1024
openssl rsa -in private.key -pubout -out public.key
RSA *r= NULL;
key = BIO_new(BIO_s_file());
BIO_read_filename(key,
r = PEM_read_bio_RSAPrivateKey(key, NULL, NULL, NULL);
BIO_free_all(key);
讀取 private key 讀取正常,r 並不返回空
使用同樣方法讀取 public key
RSA *r= NULL;
key = BIO_new(BIO_s_file());
BIO_read_filename(key, "c:\\public.key");
r
BIO_free_all(key);
不正常, r 總是返回 NULL,將函式改一下 PEM_read_bio_RSA_PUBKEY
r1 = PEM_read_bio_RSA_PUBKEY(key1, NULL,NULL,NULL);
openssl_to_keys(r, 1024, priv, pub);
r1 讀取成功
附:
openssl之PEM系列之8---PEM物件讀寫IO函式(二)
---根據openssl原始碼、SSLeay Documents以及其它相關材料寫成
(作者:DragonKing, Mail:
本文繼續介紹PEM物件的讀寫IO函式,請參看《openssl之PEM系列之7》以便更好理解本文。
【符合PKCS#8和PKCS#5 v2.0標準的私鑰物件PKCS8PrivateKey的IO】
int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,char *kstr, int klen,pem_password_cb *cb, void *u);
int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,char *kstr, int klen,pem_password_cb *cb, void *u);
這兩個函式使用PKCS#8標準儲存EVP_PKEY裡面的私鑰到檔案或者BIO中,並採用PKCS#5
v2.0的標準加密私鑰。enc引數定義了使用的加密演算法。跟其他PEM的IO函式不一樣的是,本函式的加密是基於PKCS#8層次上的,而不是基於PEM資訊欄位的,所以這兩個函式也是單獨實現的函式,而不是巨集定義函式。如果enc引數為NULL,那麼就不會執行加密操作,只是使用PKCS#8私鑰 資訊
結構。成功執行返回大於0 的數,否則返回0。
使用這兩個函式儲存的PEM物件可以使用上篇文章介紹的PEM_read_bio_PrivateKey或PEM_read_PrivateKey讀出來。
下面是一個將私鑰儲存為PKCS#8格式,並使用3DES演算法進行加密,使用的口令是"hello"的例子
if (!PEM_write_bio_PKCS8PrivateKey(bp, key, EVP_des_ede3_cbc(), NULL, 0, 0, "hello"))
{
/*出錯處理程式碼*/
}
【符合PKCS#8和PKCS#5 v1.5或PKCS#12標準的私鑰物件PKCS8PrivateKey的IO】
int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid,char *kstr, int klen,pem_password_cb *cb, void *u);
int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid,char *kstr, int klen,pem_password_cb *cb, void *u);
這兩個函式也是單獨實現的函式,而不是巨集定義函式。他們也是將私鑰儲存成PKCS#8格式,但是採用的方式是PKCS#5 v1.5或者PKCS#12進行私鑰的加密。nid引數指定了相應的加密演算法,其值應該為相應物件的NID。成功執行返回大於0 的數,否則返回0。
使用這兩個函式儲存的PEM物件可以使用上篇文章介紹的PEM_read_bio_PrivateKey或PEM_read_PrivateKey讀出來。
【公鑰物件PUBKEY的IO】
EVP_PKEY *PEM_read_bio_PUBKEY(BIO *bp, EVP_PKEY **x,pem_password_cb *cb, void *u);
EVP_PKEY *PEM_read_PUBKEY(FILE *fp, EVP_PKEY **x,pem_password_cb *cb, void *u);
int PEM_write_bio_PUBKEY(BIO *bp, EVP_PKEY *x);
int PEM_write_PUBKEY(FILE *fp, EVP_PKEY *x);
這四個函式對EVP_PKEY結構的公鑰進行PEM格式的讀寫處理。公鑰是作為SubjectPublicKeyInfo儲存結構進行編碼的。
【RSA私鑰物件RSAPrivateKey的IO】
RSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **x,pem_password_cb *cb, void *u);
RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **x,pem_password_cb *cb, void *u);
int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc,unsigned char *kstr, int klen,pem_password_cb *cb, void *u);
int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc,unsigned char *kstr, int klen,pem_password_cb *cb, void *u);
這四個函式對RSA結構的RSA私鑰進行PEM格式的讀寫處理。它使用跟PrivateKey相同的函式進行處理,但如果私鑰型別不是RSA,就會返回錯誤資訊。
【RSA公鑰物件RSAPublicKey的IO】
RSA *PEM_read_bio_RSAPublicKey(BIO *bp, RSA **x,pem_password_cb *cb, void *u);
RSA *PEM_read_RSAPublicKey(FILE *fp, RSA **x,pem_password_cb *cb, void *u);
int PEM_write_bio_RSAPublicKey(BIO *bp, RSA *x);
int PEM_write_RSAPublicKey(FILE *fp, RSA *x);
這四個函式是對RSA結構的公鑰進行PEM格式的讀寫處理。本函式使用PKCS#1 RSAPublicKey結構標準對RSA公鑰進行編碼操作。
【RSA公鑰物件RSA_PUBKEY的IO】
RSA *PEM_read_bio_RSA_PUBKEY(BIO *bp, RSA **x,pem_password_cb *cb, void *u);
RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x,pem_password_cb *cb, void *u);
int PEM_write_bio_RSA_PUBKEY(BIO *bp, RSA *x);
int PEM_write_RSA_PUBKEY(FILE *fp, RSA *x);
這四個函式也是對RSA結構的公鑰進行PEM格式的讀寫處理。但是本函式使用SubjectPublicKeyInfo結構標準對RSA公鑰進行編碼操作,如果公鑰型別不是RSA,就出錯返回失敗資訊。
相關推薦
ZZ:OpenSSL中產生RSA KEY以及讀取PEM檔案的問題
原文搬家了,就算從這裡轉的吧: ZZ from: http://blog.csdn.net/lazyclough/article/details/7646696 產生openssl RSA Key的命令: openssl genrsa -out private.key 1
putty中新增RSA key
一般我們會在putty 中新增rsa key, 我們首先需要用gitbash(當然也可以用其它的)去生成rsa的公鑰和私鑰,生成後,將公鑰上傳到遠端服務端。如下操作: 第一步:我們先輸入ssh-keygen -t rsa 然後會要求我們確定 路徑我們直接回車會
C#中常用的幾種讀取XML檔案的方法
XML檔案是一種常用的檔案格式,例如WinForm裡面的app.config以及Web程式中的web.config檔案,還有許多重要的場所都有它的身影。Xml是Internet環境中跨平臺的,依賴於內容的技術,是當
XPath在QT中的使用(QXmlQuery讀取XML檔案)
最近一段時間和Xml檔案算是幹上了,先後用了QXmlStream、Dom、Dhtmlxtree、DhtmlXform方式讀寫Xml檔案。昨天接到任務讓用Xpath方式實現Xml讀取。經過了解在QT中有QxmlQuery類用來實現XPath,接下來就說說這個東東! 1.
在QT中使用tinyxml庫來讀取XML檔案失敗的經歷
增加了一個配置項,XML節點名稱用的數字開頭的,如<11aa>0</11aa> 結果在儲存的時候能成功,但是讀取的時候一直load xml failed。 將其修改成<aa11>0</aa11>之後就好了 特此記錄!
JAVA中通過poi和pdfbox讀取office檔案和pdf檔案內容
xlsx* @param file* @return* @throws IOException*/public static String readEXCEL2007(String file) throws IOException {StringBuilder content = new StringBuil
wangeditor使用以及讀取本地檔案錯誤解決(思想教訓深刻啊)
由於專案需要富文字編輯器來設計網站後臺,所以選擇了wangeditor富文字編輯器。 一、生成富文字編輯器 <div class="formDiv"><h3>內容</h3> <div style="width: 100%;max-w
關於tensorflow中Dataset圖片的批量讀取以及維度的操作
三維的讀取圖片(w, h, c): import tensorflow as tf import glob import os def _parse_function(filename): # print(filename) image_string = tf.re
Random在for以及foreach迴圈中產生相同隨機數問題
在Random生成隨機數的時候,他是根據當前毫秒值來進行隨機生成,如果短時間內連續生成隨機數,就會導致生成的隨機數相同。下面我們介紹如何解決在 短時間內生成隨機數的時候,如何避免隨機數不一樣的問題。 利用Lock鎖住random引數 Random rand = new Random(); pub
java中讀取配置檔案的一些方法 getResourceAsStream 和 直接 FileInputStream 以及 配置System.getProperty("user.dir")所得的工作目錄
配置檔案位於 /src/ 下的情況已經由上述博主列出,需要的可以移步檢視,即以下幾個情況 1.路徑:src/aa.xml 2.位於src下同一個包下 3.位於src下不同包 不過本博主的專案是web專案,而配置檔案放在src檔案下容易因為快取導致更新不及時,
CTF密碼學中RSA學習以及總結
關於CTF中RSA學習筆記 RSA簡介 為了方便理解,先對RSA金鑰體制做個簡略的介紹。 選擇兩個大的引數,計算出模數 N = p * q 計算尤拉函式 φ = (p-1) * (q-1),然後選擇一個e(1<e<φ),並且e和φ互質(互質:公約
golang產生RSA的公鑰以及私鑰
package main import ( "crypto/rsa" "crypto/rand" "fmt" "crypto/x509" "encoding/pem" "os" ) func main() { key, err := rsa.G
使用OpenSSL生成私鑰(Private Key)以及根據Private Key建立證書
公鑰和私鑰通常是成對出現的,有了公鑰那就存在對應的私鑰,通常OpenSSL,公鑰是很容易從私鑰中得到的,因而我們要建立證書,那我們首先要做的就是建立私鑰。1、使用OpenSSL生成私鑰常用的生成演算法有RSA及DSA,RSA生成的私鑰可以用來加密以及簽名,而DSA生成的私鑰只可
Java中使用OpenSSL生成的RSA公私鑰對資料進行加解密
Java基於OpenSSL的公私鑰對資料進行加解密 使用OpenSSL來生成私鑰和公鑰 RSA加密解密工具類 簽名及校驗類 測試類 使用OpenSSL來生成私鑰和公鑰
python 在excel檔案中寫入date日期資料,以及讀取excel日期資料,如何在python中正確顯示date日期。
如何通過python寫入date資料了? 寫入還是很簡單的。 import xlwt3 import datetime as dt workbook = xlwt.Workbook() worksheet = workbook.add_sheet('Sheet1') wo
JAVA以及JSP中讀取XML檔案(解析及路徑問題)
在系統開發過程中,從配置檔案中讀取配置資訊是每一個系統必須具備的功能,例如,我們要配置讀取資料庫配置資訊,包括驅動程式名、連線字串,使用者名稱,口令等資訊,由於這些資訊會隨著使用者的不同而發生
OPENSSL中RSA私鑰檔案(PEM格式)解析
在PKCS#1 RSA演算法標準中定義RSA私鑰語法為: RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e priv
Spark中載入本地(或者hdfs)檔案以及 spark使用SparkContext例項的textFile讀取多個資料夾(巢狀)下的多個數據檔案
Spark中載入本地(或者hdfs)檔案以及 spark使用SparkContext例項的textFile讀取多個資料夾(巢狀)下的多個數據檔案 在正常呼叫過程中,難免需要對多個資料夾下的多個檔案進行讀取,然而之前只是明確了spark具備讀取多個檔案的能力。針對多個資料夾下
openssl生成ca證書,以及過程中遇到的問題總結
相關說明:轉載於:http://www.cnblogs.com/yangyquin/p/5284530.html在原有的基礎上總結了一些本人安裝過程中的一些問題參考資料:http://blog.sina.com.cn/s/blog_7ea5cb4d0100xfce.html
OpenSSL中HMAC,MD5以及對稱加密演算法的應用
HMAC和MD5: HMAC的使用:#include <openssl/hmac.h> unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,