OpenSsl庫 Rsa的簡單使用

2022-06-27 13:06:16 字數 3140 閱讀 3678

環境的配置可以參考

網路上傳輸的資料很容易被抓包,如果不加密,那麼網路數

據很容易被竊取,諸如使用者名稱、密碼這些明感的資訊一旦丟

失,將會造成巨大的損失。

2、常用的加密方式

對稱加密:加密方和解密方使用同乙個秘鑰

優點:加密解密過程簡單,高效

缺點:有一 方洩密了,則整個加密就失去了意義

非對稱加密:加密方和解密方使用不同的秘鑰

優點:解密的秘鑰無法由加密的秘鑰,即使加密方暴露出  了秘鑰也沒事,這種加密方和解密方使用不同的秘  鑰,大大提高了安全性

缺點:效率比較低下,過程比較繁瑣

3、輔助概念

1、質數的概念

2、互為質數的概念

4、rsa加密秘鑰的獲取

step1:隨機選取兩個數p、q,滿足互質

step2:n=p*q,//公開模數 public modules,其二進位制位數即為                           秘鑰長度

step3:g=f(p,q)=(p-1)*(q-1)

step4:在1和g之間任意乙個隨機整數e,滿足1step5:由 e*d mod g = 1 關係式推導出來d,//private exponent,  私有指數

5、rsa加密秘鑰的獲取

rsa演算法中的:

公開秘鑰=(e,n)

私有秘鑰=(d,n)

6、rsa加密解密演算法

加密演算法:設m為需要加密的明文資料

則加密演算法為:encrypt_message = m^e mod n

解密演算法:設d為需要解密的密文資料

則解密演算法為:decrypt_message = d^d mod n

8、rsa演算法缺點

1 效率非常低下

2 密文資料較之原資料,其長度大大增加,即資料冗餘太嚴重

1 #include 2 #include 3 #include 4 #include 5 #include 6

#pragma comment(lib,"libeay32.lib")

7#pragma comment(lib,"ssleay32.lib")

8#define p "bcf3"

9#define q "116ab"

10#define n "cdae1851"

11#define e "10001"

12#define d "8c88f2a5"

13int my_rsa_public_encrypt(int flen, const unsigned char *from, unsigned char *to);

14int my_rsa_private_decrypt(int flen, const unsigned char *from, unsigned char *to);

1516

int main(void)17

;20 unsigned char decsz[500]=;

21 my_rsa_public_encrypt(lstrlen(from)+1,(unsigned char*)from

,sz);

22 my_rsa_private_decrypt(lstrlen((char*)sz),sz,decsz);

23 system("

pause");

24return0;

25}26int my_rsa_public_encrypt(int flen, const unsigned char *from, unsigned char *to)

2739

bn_init(bignum);

40bn_init(bignue);

41 bn_hex2bn(&bignum,n);

42 bn_hex2bn(&bignue,e);

43 rsa->n =bignum;

44 rsa->e =bignue;

45err_load_crypto_strings();

46int nret = rsa_public_encrypt(flen,from

,to,rsa,rsa_no_padding);

47 dword dwerror =err_get_error();

48if(nret<0)49

58 printf("

%x\r\n

",*(pdword)to);

59err_free_strings();

60bn_free(bignue);

61bn_free(bignum);

62rsa_free(rsa);

63return1;

6465}66

int my_rsa_private_decrypt(int flen, const unsigned char *from, unsigned char *to)

6781

bn_init(bignum);

82bn_init(bignue);

83bn_init(bignup);

84 bn_hex2bn(&bignup,e);

85 bn_hex2bn(&bignum,n);

86 bn_hex2bn(&bignue,d);

87 rsa->n =bignum;

88 rsa->d =bignue;

89 rsa->e =bignup;

90err_load_crypto_strings();

91int nret = rsa_private_decrypt(flen,from

,to,rsa,rsa_no_padding);

92 dword dwerror =err_get_error();

93if(nret<0)94

103 printf("

%s\r\n

",to);

104err_free_strings();

105bn_free(bignue);

106bn_free(bignum);

107bn_free(bignup);

108rsa_free(rsa);

109return1;

110 }

C 呼叫openssl庫生成RSA加密秘鑰對

直接上 預設生成的是pkcs 1格式 rsa非對稱加解密 define key length 1024 金鑰長度 define pub key file pubkey.pem 公鑰路徑 define pri key file prikey.pem 私鑰路徑 函式方法生成金鑰對 void genera...

openssl對rsa金鑰的管理用法

二 然後,通過jdk自帶的keytool工具建立秘鑰對 1.建立rsa金鑰對 公鑰和私鑰 並儲存在keystore檔案中 keytool genkeypair alias myalias keyalg rsa keystore keystore.jks2.從keystore檔案中匯出使用x509標準...

linux下OpenSSL的RSA金鑰生成

openssl version openssl 1.0.0e.tar.gz 安裝 2 在資料夾下解壓縮,命令 tar xzf openssl openssl 1.0.0e.tar.gz 得到openssl openssl 1.0.0e資料夾 3 進入解壓的目錄 cd openssl 1.0.0e 4...