openssl 學習之從證書中提取RSA公鑰N 和 E

?

原文鏈接:?http://blog.csdn.net/kkxgx/article/details/19850509

通常數字證書包含很多信息,其中N和E值即我們稱為的公鑰。如何從PEM 或者DER格式的證書中提出證書呢?下面給出代碼實現從PEM和DER編碼的證書中提出N、E。

?

[cpp]?view plaincopy在CODE上查看代碼片派生到我的代碼片
?
  1. #include?<openssl/evp.h>??
  2. #include?<openssl/x509.h>??
  3. #include?<stdio.h>??
  4. #include?<stdlib.h>??
  5. void?PrintHex(unsigned?char?*str,?unsigned?int?len)??
  6. {??
  7. ????int?i?=?0;??
  8. ????for(i?=0;i<?len;?i++)??
  9. ????{??
  10. ????????if(i%4?==?0)??
  11. ????{??
  12. ???????printf("0x");??
  13. ????}??
  14. ????????printf("%02x",str[i]);??
  15. ????if(i%4?==?3)??
  16. ????????{??
  17. ???????????printf("?");??
  18. ????????}??
  19. ????????if(i%16?==?15)??
  20. ????????{??
  21. ????????printf("\n");??
  22. ????????}??
  23. ????}??
  24. ????printf("\n");??
  25. }??
  26. void?GetPukfromPEM()??
  27. {??
  28. ????X509?*x;??
  29. ????BIO?*b;??
  30. ????EVP_PKEY?*k;??
  31. ????RSA?*rsa;??
  32. ????unsigned?char?n[300]?={0x0};??
  33. ????unsigned?char?e[300]?={0x0};??
  34. ????unsigned?int?len;??
  35. ????/*www.google.com1為PEM格式的數字證書,從firefox中導出?*/???????
  36. ????b=BIO_new_file("www.google.com1","r");??
  37. ????x=PEM_read_bio_X509(b,NULL,NULL,NULL);??
  38. ????k=X509_get_pubkey(x);??
  39. ????rsa=EVP_PKEY_get1_RSA(k);??
  40. ????if(rsa->n?!=?NULL)??
  41. ????{??
  42. ????????BN_bn2bin(rsa->n,?n);??
  43. ????????len=?BN_num_bytes(rsa->n);??
  44. ????????printf("N:\n");??
  45. ????????PrintHex(n,len);??
  46. ????}??
  47. ????else??
  48. ????{??
  49. ????????printf("PEM?error?\n");??
  50. ????}??
  51. ????if(rsa->e?!=?NULL)??
  52. ????{??
  53. ????????BN_bn2bin(rsa->e,?e);??
  54. ????????len=?BN_num_bytes(rsa->e);????
  55. ????????printf("E:\n");??
  56. ????????PrintHex(e,len);??
  57. ????}??
  58. ????else??
  59. ????{??
  60. ????????printf("PEM?error?\n");??
  61. ????}??
  62. ????BIO_free(b);??
  63. ????X509_free(x);??
  64. }??
  65. void?GetPukfromDER()??
  66. {??
  67. ????X509?*x;??
  68. ????FILE?*fp;??
  69. ????unsigned?char???buf[5000],*p;??
  70. ????int?ret;??
  71. ? ??
  72. ????EVP_PKEY?*k;??
  73. ????RSA?*rsa;??
  74. ????unsigned?char?n[300]?={0x0};??
  75. ????unsigned?char?e[300]?={0x0};??
  76. ????unsigned?int?len;??
  77. ????/*?www.google.com2為DER編碼的數字證書?,從firefox中導出?
  78. ????*/??
  79. ????fp=fopen("www.google.com2","rb");??
  80. ????if(!fp)?return?;??
  81. ????len=fread(buf,1,5000,fp);??
  82. ????fclose(fp);??
  83. ????p=buf;??
  84. ????x=X509_new();??
  85. ????d2i_X509(&x,(const?unsigned?char?**)&p,len);??
  86. ????k=X509_get_pubkey(x);??
  87. ????rsa=EVP_PKEY_get1_RSA(k);??
  88. ????if(rsa->n?!=?NULL)??
  89. ????{??
  90. ????????BN_bn2bin(rsa->n,?n);??
  91. ????????len=?BN_num_bytes(rsa->n);??
  92. ????printf("N:\n");??
  93. ????PrintHex(n,len);??
  94. ????}??
  95. ????else??
  96. ????{??
  97. ????????printf("DER?error?\n");??
  98. ????}??
  99. ????if(rsa->e?!=?NULL)??
  100. ????{??
  101. ????????BN_bn2bin(rsa->e,?e);??
  102. ????????len=?BN_num_bytes(rsa->e);??
  103. ????????printf("E:\n");??
  104. ????????PrintHex(e,len);??
  105. ????}??
  106. ????else??
  107. ????{??
  108. ????????printf("DER?error?\n");??
  109. ????}??
  110. ? ? ??
  111. ????X509_free(x);?????
  112. }??
  113. int?main()??
  114. {??
  115. ????GetPukfromPEM();??
  116. ????GetPukfromDER();??
  117. ????return?0;??
  118. }??

程序執行結果如下:

?

?

[plain]?view plaincopy在CODE上查看代碼片派生到我的代碼片
?
  1. N:??
  2. 0xb073f0f2?0x04eec2a2?0x46ca342a?0xaabb6023???
  3. 0xd111761f?0x1f3ad065?0x834e9a45?0xa8437085???
  4. 0x76f01f87?0x00021f6e?0x3b1717c4?0xb5e91946???
  5. 0xa292258d?0x622ab463?0x301fb985?0xf835e116???
  6. 0x5a7649cc?0x50485339?0x5989d684?0x02fb9aec???
  7. 0x1bc751d5?0x769590d4?0x3a2ab8a6?0xde024d06???
  8. 0xfbcdeda5?0x46415f55?0x74e5ec7e?0x40dc509c???
  9. 0xb5e4355d?0x1e6820f8?0xe9dea36a?0x28bf41d2???
  10. 0xa1b3e225?0x8d0c1bca?0x3d930c18?0xaedfc5bc???
  11. 0xfdbc82ba?0x6800d716?0x32719f65?0xb511da68???
  12. 0x59d0a657?0x641bc9fe?0x98e5f5a5?0x65eae1db???
  13. 0xeef4b39d?0xb38eea87?0xae16d21e?0xa07c7c69???
  14. 0x3f291685?0x0153a76c?0xf160abdd?0xa2fc2547???
  15. 0xd432d112?0xddf74812?0xe0fc9ca2?0x7798e989???
  16. 0x99b8f838?0xf18c06c2?0x7a23366d?0x9b9dcd30???
  17. 0xc8c73417?0x1ebb7d42?0xc8abe715?0x16f673b5???
  18. ??
  19. E:??
  20. 0x010001??
  21. N:??
  22. 0xb073f0f2?0x04eec2a2?0x46ca342a?0xaabb6023???
  23. 0xd111761f?0x1f3ad065?0x834e9a45?0xa8437085???
  24. 0x76f01f87?0x00021f6e?0x3b1717c4?0xb5e91946???
  25. 0xa292258d?0x622ab463?0x301fb985?0xf835e116???
  26. 0x5a7649cc?0x50485339?0x5989d684?0x02fb9aec???
  27. 0x1bc751d5?0x769590d4?0x3a2ab8a6?0xde024d06???
  28. 0xfbcdeda5?0x46415f55?0x74e5ec7e?0x40dc509c???
  29. 0xb5e4355d?0x1e6820f8?0xe9dea36a?0x28bf41d2???
  30. 0xa1b3e225?0x8d0c1bca?0x3d930c18?0xaedfc5bc???
  31. 0xfdbc82ba?0x6800d716?0x32719f65?0xb511da68???
  32. 0x59d0a657?0x641bc9fe?0x98e5f5a5?0x65eae1db???
  33. 0xeef4b39d?0xb38eea87?0xae16d21e?0xa07c7c69???
  34. 0x3f291685?0x0153a76c?0xf160abdd?0xa2fc2547???
  35. 0xd432d112?0xddf74812?0xe0fc9ca2?0x7798e989???
  36. 0x99b8f838?0xf18c06c2?0x7a23366d?0x9b9dcd30???
  37. 0xc8c73417?0x1ebb7d42?0xc8abe715?0x16f673b5???
  38. ??
  39. E:??
  40. 0x010001 ?

?

轉載于:https://www.cnblogs.com/huhu0013/p/4794613.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258358.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258358.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258358.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

獲得漢字字符個數

//獲得漢字字符個數function ChineseWordsCount(text:string):Integer;var i,sum,e,c,t: Integer;begin Result:0; c : 0; sum : Length(text); if Sum0 then exit; for i : 0 to sum do begin if Ord(text[i]) > 127 then begin Inc(c); end; end;…

2020湖南省技能競賽獲獎名單_2020年湖南省職業院校技能競賽學院獲獎情況通報...

由湖南省教育廳、湖南省人力資源和社會保障廳、湖南省農業農村廳等30個單位聯合舉辦的2020年湖南省職業院校技能競賽于2019年12月28日已經圓滿結束所有競賽項目&#xff0c;我院選派了190名選手參加了園林景觀設計與施工、雞新城疫抗體水平測定、集成電路開發及應用、農機維修、…

Web browser的發展演變

我們每天都在使用著瀏覽器&#xff0c;每個人使用的瀏覽器各不一樣。在這個科技飛速發展的時代&#xff0c;一個游覽器能否站住腳跟取決于使用者的數量&#xff0c;看用戶是否喜歡這個產品&#xff0c;聽取用戶們的意見來改善。 我們這個年齡的人最初用到的瀏覽器肯定是IE瀏覽器…

nodejs簡單層級結構配置文件

在NodeJS中使用配置文件&#xff0c;有幾種比較不錯的方案&#xff1a;第一種&#xff1a;文件格式使用json是毋容置疑的好方案。格式標準&#xff0c;易于理解&#xff0c;文件內容讀取到內存之后&#xff0c;使用JSON的標準分析函數即可得到配置項。第二種&#xff1a;將配置…

C++語言基礎(1)-命名空間

一個中大型軟件往往由多名程序員共同開發&#xff0c;會使用大量的變量和函數&#xff0c;當有兩個人都同時定義了一個名字相同的全局變量或函數的時候&#xff0c;若是把他們的代碼整合在一塊編譯&#xff0c;此時編譯器就會提示變量或函數重復定義&#xff0c;C為了解決這個問…

matlab 散點圖 線性回歸圖_線性回歸思路梳理

作者&#xff1a;夏雨驕陽 封面&#xff1a;自己想吧1簡單線性回歸1根據研究目的確定因變量和自變量。2判斷有無異常值。通過繪制散點圖直觀觀察&#xff1b;亦可通過線性回歸的【統計】→【個案診斷】→【所有個案】進行分析&#xff0c;若標準殘差超過[-3,3]&#xff0c;則…

物聯網云端設計分析

物聯網是世界信息產業發展的新浪潮&#xff0c;智能手表、智能手環、智能燈等物聯網產品不斷的改變著人們的生活方式。那這些產品是怎么設計出來的呢&#xff1f;其實物聯網操作系統不光由本地物聯網設備上的操作系統組成&#xff0c;還包括提供物聯網終端設備支持的云端架構。…

PHP使用文件流下載文件方法(附:解決下載文件內容亂碼問題)

記得高中時候做過游戲私服&#xff0c;那時候的游戲主頁是用PHP寫的&#xff0c;因為文件很固定&#xff0c;客戶端&#xff0c;登陸器和一些小工具&#xff0c;文件數目也不是很多&#xff0c;所以都是直接把下載鏈接寫死的&#xff0c;直接鏈接到本地服務器的文件目錄&#x…

Redis和Memcached的區別

2019獨角獸企業重金招聘Python工程師標準>>> Redis的作者Salvatore Sanfilippo曾經對這兩種基于內存的數據存儲系統進行過比較&#xff1a; Redis支持服務器端的數據操作&#xff1a;Redis相比Memcached來說&#xff0c;擁有更多的數據結構和并支持更豐富的數據操作…

hbase hmaster一會就沒了_淺析HBase

一、HBase簡介1、Apache HBase?是Hadoop數據庫&#xff0c;是一個分布式&#xff0c;可擴展的大數據存儲。2、當您需要對大數據進行隨機&#xff0c;實時讀/寫訪問時&#xff0c;請使用Apache HBase?。 該項目的目標是托管非常大的表&#xff08; 數十億的行*百萬的列 &#…

【Android工具】DES終結者加密時報——AES加密演算法

轉載請注明出處&#xff1a;http://blog.csdn.net/zhaokaiqiang1992在前面的兩篇文章中。我們介紹了DES算法&#xff0c;3DES算法以及他們的Android程序實現&#xff0c;并研究了怎樣才干實現不同平臺下加密算法的一致性。只是話說起來&#xff0c;DES算法是在1976年被美國的國…

MATLAB 迭代法解方程

MATLAB 迭代法解方程 1、代碼如下&#xff1a; %%牛頓迭代法解方程 function xnewton_interation(fun,dfun,x0,EPS) %簡單牛頓迭代法%fun即迭代函數&#xff0c;dfun即迭代函數的一階導數&#xff0c;x0為迭代初值&#xff0c;EPS為精度x1x0-fun(x0)/dfun(x0); %牛頓迭代公…

【12期 3月期刊 自薦】

12期的小伙伴看過來~因為網易博客的網絡問題。我們把負責收集自薦的博客寫到了CSDN里&#xff0c;希望大家在此篇博客的評論里&#xff0c;積極自薦自己的博客。 為了提高大家的積極性&#xff0c;我們評選優秀博客的方法升級為大家自薦博客&#xff0c;博客委員會當月負責人進…

超微服務器電源短接啟動圖解_教你一招,讓你的電腦啟動速度秒殺別人

win10快速啟動其實是電腦的一種休眠模式&#xff0c;它將電腦中的一些本該關閉的文件保存到hiberfil.sys的磁盤文件中&#xff0c;這樣打開電腦時就達到了快速開機的目的。接下來&#xff0c;我就將win10設置快速啟動的方法分享給你們win10系統功能非常強大&#xff0c;最讓大家…

MATLAB 求離散信號卷積

MATLAB 求離散信號卷積 代碼如下&#xff1a; function [C,Ck] dt_convolution_advance(A,B,Ak,Bk) % dt_convolution_advance 計算離散信號卷積 % A 輸入信號 % B 輸入信號 % Ak 輸入信號A下標 % Bk 輸入信號B下標 % C 輸出信號 % Ck 輸出信號C下標 % 計算輸入信號A&…

Oracle data type number

Oracle numberNUMBER [ (p [, s]) ]Number having precision p and scale s. Theprecision p can range from 1 to 38. The scale s can range from -84 to 127. Bothprecision and scale are in decimal digits. A NUMBER value requires from 1 to 22bytes.scale是可選的。SQ…

發布 項目_第十八期科創基金項目發布會圓滿結束

第十八期科創基金項目發布會圓滿結束賀電&#xff01;賀電!電子信息工程學院發來賀電&#xff1a;第十八屆科創基金項目發布會圓滿結束啦&#xff01;感謝導師們的支持、現場同學的熱情參與和科協朋友后勤服務&#xff01;NUAA即使是寒冷的冬天也無法阻擋同學們對科創的熱情,那…

Visual Studio .NET、.NET Framework和C#之間的聯系

Visual Studio .NET是一種集成開發環境&#xff08;IDE&#xff09;&#xff0c;它包含3種高級程序設計語言&#xff0c;C#就是其中的一種&#xff1b;Visual Studio .NET之所以能把這三種語言有機結合起來并具有與平臺無關的特性&#xff0c;其原因在于.NET Framework提供了公…

Fisher線性判別算法原理及實現 MATLAB

Fisher線性判別算法原理及實現 MATLAB 一、Fisher判別器原理 二、代碼實現 clc; close all; clear; %% 生成數據 rng(2020); %指定一個種子 mu1 [0 3]; sigma1 [0.5 0; 0 0.5]; data1 mvnrnd(mu1,sigma1,300); %生成一個300*2的矩陣&#xff0c;每一列的數據分別以0&…

大話設計模式之外觀模式

年年作品展&#xff0c;歲歲不相同&#xff0c;鵝黃新綠漣漪泛起思想的火花卻不盡相同。十期的作品展&#xff0c;從13年3月20號開始到完美落幕&#xff0c;時至今日&#xff0c;她已經在我的記憶中成為過去。這朵小小的浪花激起的漣漪漸漸褪去&#xff0c;或許已沒有或許&…