日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rsa加密c语言源码库,RSA加密算法源代码C语言实现.doc-资源下载在线文库www.lddoc.cn...

發(fā)布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rsa加密c语言源码库,RSA加密算法源代码C语言实现.doc-资源下载在线文库www.lddoc.cn... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

RSA加密算法_源代碼__C語言實現(xiàn).doc

RSA 算法 1978 年就出現(xiàn)了這種算法,它是第一個既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法。它易于理解和操作,也很流行。算法的名字以發(fā)明者的名字命名Ron Rivest, AdiShamir 和 Leonard Adleman。但 RSA 的安全性一直未能得到理論上的證明。RSA 的安全性依賴于大數(shù)難于分解這一特點。公鑰和私鑰都是兩個大素數(shù)(大于 100個十進(jìn)制位)的函數(shù)。據(jù)猜測,從一個密鑰和密文推斷出明文的難度等同于分解兩個大素數(shù)的積。密鑰對的產(chǎn)生。選擇兩個大素數(shù),p 和 q 。計算n p * q 然后隨機(jī)選擇加密密鑰e,要求 e 和 p - 1 * q - 1 互質(zhì)。最后,利用 Euclid 算法計算解密密鑰 d, 滿足 e * d 1 mod p - 1 * q - 1 其中 n 和 d 也要互質(zhì)。數(shù) e 和 n 是公鑰,d 是私鑰。兩個素數(shù) p和 q 不再需要,應(yīng)該丟棄,不要讓任何人知道。加密信息 m(二進(jìn)制表示)時,首先把m 分成等長數(shù)據(jù)塊 m1 ,m2,., mi ,塊長 s,其中 2s include include using namespace std;RSA 算法所需參數(shù)typedef struct RSA_PARAM_Tagunsigned int64 p, q; 兩個素數(shù),不參與加密解密運算unsigned int64 f; fp-1*q-1,不參與加密解密運算unsigned int64 n, e; 公匙,np*q,gcde,f1unsigned int64 d; 私匙,e*d1 mod f ,gcdn,d1unsigned int64 s; 塊長,滿足 2s1; aa * a n; 函數(shù)看起來可以處理 64 位的整數(shù),但由于這里 a*a 在 a232 時已經(jīng)造成了溢出,因此實際處理范圍沒有 64 位aMulModa, a, n; b; ca * c n; 這里也會溢出,若把 64 位整數(shù)拆為兩個 32 位整數(shù)不知是否可以解決這個問題。cMulModa, c, n; return c;/*Rabin-Miller 素數(shù)測試,通過測試返回 1,否則返回 0。n 是待測素數(shù)。注意通過測試并不一定就是素數(shù),非素數(shù)通過測試的概率是 1/4*/long RabinMillerKnlunsigned int64 mn - 1;j0; 0、先計算出 m、j ,使得 n-1m*2j,其中 m 是正奇數(shù),j 是非負(fù)整數(shù)whilem m1; 1、隨機(jī)取一個 b,2 q p q;unsigned int64 bp q p q;unsigned int64 bp 1;b1; ifa 如果 a 為偶數(shù),交換 a, bab;bt; dowhileb b 為偶數(shù),a 為奇數(shù)時,gcdb,agcdb/2,a ifb 1; b、a 都是奇數(shù),gcdb,agcdb-a/2,a whileb;return r * a;/*已知 a、b,求 x,滿足 a*x 1 mod b相當(dāng)于求解 a*x-b*y1 的最小整數(shù)解*/unsigned int64 Euclidunsigned int64 long xx, yy;mb;ea;x0;y1;xx1;yy1;whileeim / e;jm e;me;ej;jy;y*i;ifxx yyifx yyx - y;elsey-x;yy0;elseyx;xx1 - xx;yy1 - yy; xj; ifxx 0xb - x; return x;/*隨機(jī)產(chǎn)生一個 RSA 加密參數(shù)*/RSA_PARAM RsaGetParamvoidRSA_PARAM Rsa 0 ;unsigned int64 t;Rsa.pRandomPrime16; 隨機(jī)生成兩個素數(shù)Rsa.qRandomPrime16;Rsa.nRsa.p * Rsa.q;Rsa.fRsa.p - 1 * Rsa.q - 1;doRsa.eg_Rnd.Random65536; 小于 216,65536216Rsa.e|1; 保證最低位是 1,即保證是奇數(shù),因 f 一定是偶數(shù),要互素,只能是奇數(shù) whileSteinGcdRsa.e, Rsa.f 1; Rsa.dEuclidRsa.e, Rsa.f;Rsa.s0;tRsa.n 1;whiletRsa.s; slog2nt1; return Rsa;/*拉賓米勒測試*/void TestRMvoidunsigned long k0;cout “ - Rabin-Miller prime check.n“ endl;forunsigned int64 i4197900001; i 4198000000; i2ifRabinMilleri, 30k;cout i endl; cout “Total “ k endl;/*RSA 加密解密*/void TestRSAvoidRSA_PARAM r;char pSrc“abcdefghijklmnopqrstuvwxyz“;const unsigned long nsizeofpSrc;unsigned char *q, pDecn;unsigned int64 pEncn;rRsaGetParam;cout “p“ r.p endl;cout “q“ r.q endl;cout “fp-1*q-1“ r.f endl;cout “np*q“ r.n endl;cout “e“ r.e endl;cout “d“ r.d endl;cout “s“ r.s endl;cout “Source“ pSrc endl;q unsigned char *pSrc;cout “Encode“;forunsigned long i0; i n; ipEnciPowModqi, r.e, r.n;cout hex pEnci “ “; cout endl;cout “Decode“;forunsigned long i0; i n; ipDeciPowModpEnci, r.d, r.n;cout hex unsigned longpDeci “ “; cout endl;cout char *pDec endl;/* */int mainvoidTestRSA;return 0;

總結(jié)

以上是生活随笔為你收集整理的rsa加密c语言源码库,RSA加密算法源代码C语言实现.doc-资源下载在线文库www.lddoc.cn...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。