rsa加密演算法是一種
非對稱加密演算法。
rsa
公開金鑰密碼體制:
加密金鑰(即公開金鑰)pk
是公開資訊,而解密金鑰(即秘密金鑰)
sk是需要保密的。
加密演算法
e和解密演算法
d也都是公開的。
雖然解密金鑰
sk是由公開金鑰
pk決定的,由於無法計算出大數
n的尤拉函式
phi(n)
,所以不能根據
pk計算出sk。
為提高保密強度,rsa金鑰至少為500位長,一般推薦使用1024位。
應用場景:
這就使加密的計算量很大。為減少計算量,在傳送資訊時,常採用傳統加密方法與
公開金鑰
加密方法相結合的方式。
即資訊採用改進的
des或
idea
金鑰加密,然後使用
rsa金鑰加密對話金鑰和資訊摘要。
使用openssl實現rsa的加解密功能:
#include #include #include #include #include #include #include using namespace std;
#define public_key_file "public.pem" //公鑰檔案
#define private_key_file "private.pem" //私鑰檔案
//***生成公鑰和私鑰檔案***
void generatekey()
//***通過公鑰加密資料***
string encodebybiopublickey(string data)
; char *ptmp = null;
ptmp = err_error_string(ulerr, szerrmsg);
printf("bio_read_publickey %s\n", szerrmsg);
return strret;
} int nlen = rsa_size(rsak);
char *pencode = new char[nlen + 1];
int ret = rsa_public_encrypt(data.length(), (const unsigned char*)data.c_str(),
(unsigned char *)pencode, rsak, rsa_pkcs1_padding);
if (ret >= 0)
delete pencode;
crypto_cleanup_all_ex_data();
bio_free_all(bp);
rsa_free(rsak);
return strret;
}//***通過私鑰解密資料***
string decodebybioprivatekey(string data)
; char *ptmp = null;
ptmp = err_error_string(ulerr, szerrmsg);
printf("%s\n", szerrmsg);
} int nlen = rsa_size(rsak);
char *pencode = new char[nlen + 1];
int nret = rsa_private_decrypt(data.length(), (const unsigned char*)data.c_str(), (unsigned char *)pencode, rsak, rsa_pkcs1_padding);
if (nret >= 0)
delete pencode;
crypto_cleanup_all_ex_data();
bio_free_all(bp);
rsa_free(rsak);
return strret;
}int main()
return 0;
}
RSA 非對稱加密演算法
1.對稱加密 甲方選擇某一種加密規則,對資訊進行加密 乙方使用同一種規則,對資訊進行解密。非對稱加密 乙方生成兩把金鑰 公鑰和私鑰 公鑰是公開的,任何人都可以獲得,私鑰則是保密的。甲方獲取乙方的公鑰,然後用它對資訊加密。乙方得到加密後的資訊,用私鑰解密。2.尤拉定理 rsa演算法的核心 可以大大簡化...
非對稱加密演算法 RSA
1 非對稱加密過程 國內使用的是雙證書體系 即使用者同時擁有簽名證書 和加密證書 兩張證書。簽名證書 是使用者的身份驗證是和ca協商的結果 加密證書 是用來對資訊進行加密,是使用者和秘鑰管理系統生成 過程是生成公鑰和私鑰的過程,基於rsa演算法實現 過程是ca對使用者的身份進行簽名,目的是驗證a的身...
非對稱加密演算法 RSA
rsa加密演算法於1977年由美國麻省理工學院的ronal rivest,adi shamir和len adleman三位年輕教授提出,並以三人的姓氏rivest,shamir和adleman命名為rsa演算法。這三位科學家榮獲2002年度圖靈獎,以表彰他們在演算法方面的突出貢獻。該演算法利用了數論...