非对称加密算法之RSA算法实现
生活随笔
收集整理的這篇文章主要介紹了
非对称加密算法之RSA算法实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
對稱加密,非對稱加密,公鑰,私鑰,RSA這些常常聽到的,到底是怎么回事
有個同事問我公鑰私鑰到底為什么能互相解開,一時語塞,平時都只是知道怎么用,但很少去了解的更細,現(xiàn)在做個整理,記個筆記
非對稱加密簡述
公鑰加密后的密文,只有私鑰才能解密
簡單來說,A和B要互相通信,A生成一個公鑰和一個私鑰,
A將公鑰傳給B,
此時B將公鑰和真正的數(shù)據(jù)M加密,生成密文是N,
B再將N通過網(wǎng)絡(luò)傳給A,
A再通過秘鑰將N解密,得到真正的數(shù)據(jù)M
公鑰私鑰原理(特指RSA算法)
網(wǎng)上抄的,但要理解
RSA算法基于一個十分簡單的數(shù)論事實:將兩個大素數(shù)相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。
擴展:
1.RSA詳解
2.RSA算法原理一
3.RSA算法原理二
java代碼簡約版實現(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算法实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [设计模式] ------ 对比总结:简
- 下一篇: Objective-C文件流操作