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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

非对称加密算法之RSA算法实现

發(fā)布時(shí)間:2024/7/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 非对称加密算法之RSA算法实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對(duì)稱加密,非對(duì)稱加密,公鑰,私鑰,RSA這些常常聽到的,到底是怎么回事

有個(gè)同事問我公鑰私鑰到底為什么能互相解開,一時(shí)語塞,平時(shí)都只是知道怎么用,但很少去了解的更細(xì),現(xiàn)在做個(gè)整理,記個(gè)筆記

非對(duì)稱加密簡(jiǎn)述

公鑰加密后的密文,只有私鑰才能解密
簡(jiǎn)單來說,A和B要互相通信,A生成一個(gè)公鑰和一個(gè)私鑰,
A將公鑰傳給B,
此時(shí)B將公鑰和真正的數(shù)據(jù)M加密,生成密文是N,
B再將N通過網(wǎng)絡(luò)傳給A,
A再通過秘鑰將N解密,得到真正的數(shù)據(jù)M

公鑰私鑰原理(特指RSA算法)

網(wǎng)上抄的,但要理解
RSA算法基于一個(gè)十分簡(jiǎn)單的數(shù)論事實(shí):將兩個(gè)大素?cái)?shù)相乘十分容易,但是想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。

算法描述: (1)選擇兩個(gè)不同的大素?cái)?shù)p和q; // p=3,q=11(2)計(jì)算乘積n=pq和Φ(n)=(p-1)(q-1); //n=33,Φ(n)=20(3)選擇大于1小于Φ(n)的隨機(jī)整數(shù)e,使得gcd(e,Φ(n))=1;//gcd即最大公約數(shù)。 //e和Φ(n)的最大公約數(shù)為1,也就是e只要不被Φ(n)整除就行,假如取e=3(4)計(jì)算d使得d*e=1mod Φ(n);注:即d*e mod Φ(n) =1。//mod是求余函數(shù) //d*e與1關(guān)于Φ(n)同余,1除以20余數(shù)是1,那么說明d*3除以20,余數(shù)也是1 //即3d=20k+1,k是整數(shù),可取得d=7(5)對(duì)每一個(gè)密鑰k=(n,p,q,d,e),定義加密變換為Ek(x)=xe mod n, 解密變換為Dk(x)=yd mod n,這里x,y∈Zn;(6)p,q銷毀,以{e,n}為公開密鑰,{d,n}為私有密鑰。實(shí)例: 1. 假設(shè)p = 3、q = 11(p,q都是素?cái)?shù)即可。),則N = pq = 33; 2. r =Φ(n)= (p-1)(q-1) = (3-1)(11-1) = 20; 3. 根據(jù)gcd(e,Φ(n))=1,即gcd(e,20)=1,令e=3,則,d = 7。 (兩個(gè)數(shù)交換一下也可以。)到這里,公鑰和密鑰已經(jīng)確定。公鑰為(N, e) = (33, 3),密鑰為(N, d) = (33, 7)。

擴(kuò)展:
1.RSA詳解
2.RSA算法原理一
3.RSA算法原理二


java代碼簡(jiǎn)約版實(shí)現(xiàn):

package com.rsa;/*** Created by zhangshuai on 2018/7/31.*/ public class RsaTest {/*** RSA算法* @param baseNum 基數(shù)* @param key 公鑰或密鑰* @param message 加密或者解密的數(shù)據(jù)* @return*/public static long rsa(int baseNum, int key, long message){if(baseNum < 1 || key < 1){return 0L;}//加密或者解密之后的數(shù)據(jù)long rsaMessage = 0L;double pow = Math.pow(message, key);System.out.println("pow="+pow);long round = Math.round(pow);System.out.println("roud="+round);//核心算法rsaMessage = Math.round(Math.pow(message, key)) % baseNum;return rsaMessage;}public static void main(String[] args){//基數(shù)int baseNum = 3 * 11;//公鑰int keyPublic = 3;//密鑰int keyPrivate = 7;//未加密的數(shù)據(jù)long msg = 24L;//獲得公鑰加密后的數(shù)據(jù)long encodeMsg = rsa(baseNum, keyPublic, msg);//獲得私鑰解密后的數(shù)據(jù)long decodeMsg = rsa(baseNum, keyPrivate, encodeMsg);System.out.println("加密前:" + msg);System.out.println("加密后:" + encodeMsg);System.out.println("解密后:" + decodeMsg);} }

結(jié)果:

pow=13824.0 roud=13824 pow=2.187E10 roud=21870000000 加密前:24 加密后:30 解密后:24

總結(jié)

以上是生活随笔為你收集整理的非对称加密算法之RSA算法实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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