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

对称加密,非对称加密,公钥,私钥,RSA这些常常听到的,到底是怎么回事

有个同事问我公钥私钥到底为什么能互相解开,一时语塞,平时都只是知道怎么用,但很少去了解的更细,现在做个整理,记个笔记

非对称加密简述

公钥加密后的密文,只有私钥才能解密
简单来说,A和B要互相通信,A生成一个公钥和一个私钥,
A将公钥传给B,
此时B将公钥和真正的数据M加密,生成密文是N,
B再将N通过网络传给A,
A再通过秘钥将N解密,得到真正的数据M

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

网上抄的,但要理解
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

 算法描述:
(1)选择两个不同的大素数p和q;
// p=3,q=11(2)计算乘积n=pq和Φ(n)=(p-1)(q-1);
//n=33,Φ(n)=20(3)选择大于1小于Φ(n)的随机整数e,使得gcd(e,Φ(n))=1;//gcd即最大公约数。
//e和Φ(n)的最大公约数为1,也就是e只要不被Φ(n)整除就行,假如取e=3(4)计算d使得d*e=1mod Φ(n);注:即d*e mod Φ(n) =1。//mod是求余函数
//d*e与1关于Φ(n)同余,1除以20余数是1,那么说明d*3除以20,余数也是1
//即3d=20k+1,k是整数,可取得d=7(5)对每一个密钥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}为私有密钥。实例:
1. 假设p = 3、q = 11(p,q都是素数即可。),则N = pq = 33;
2. r =Φ(n)= (p-1)(q-1) = (3-1)(11-1) = 20;
3. 根据gcd(e,Φ(n))=1,即gcd(e,20)=1,令e=3,则,d = 7。
(两个数交换一下也可以。)到这里,公钥和密钥已经确定。公钥为(N, e) = (33, 3),密钥为(N, d) = (33, 7)。

扩展:
1.RSA详解
2.RSA算法原理一
3.RSA算法原理二


java代码简约版实现:

package com.rsa;/*** Created by zhangshuai on 2018/7/31.*/
public class RsaTest {/*** RSA算法* @param baseNum 基数* @param key 公钥或密钥* @param message 加密或者解密的数据* @return*/public static long rsa(int baseNum, int key, long message){if(baseNum < 1 || key < 1){return 0L;}//加密或者解密之后的数据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){//基数int baseNum = 3 * 11;//公钥int keyPublic = 3;//密钥int keyPrivate = 7;//未加密的数据long msg = 24L;//获得公钥加密后的数据long encodeMsg = rsa(baseNum, keyPublic, msg);//获得私钥解密后的数据long decodeMsg = rsa(baseNum, keyPrivate, encodeMsg);System.out.println("加密前:" + msg);System.out.println("加密后:" + encodeMsg);System.out.println("解密后:" + decodeMsg);}
}

结果:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

流式计算storm核心组件介绍以及入门案例---跟着就能在本地跑起来的storm项目

关于storm的基础,参照我这篇文章:流式计算storm 关于并发和并行,参照我这篇文章:并发和并行 关于storm的并行度解释,参照我这篇文章:storm的并行度解释 关于storm的流分组策略,参照我这篇文章:storm的流分组策略 关于storm的消息可靠机制,参照我这篇文章:storm的消息可靠机制 …

javascript中的this讲解

查看this指向的一句话法则&#xff1a;永远指向其所在函数的所有者如果没有所有者时&#xff0c;指向window。理解this的要点&#xff1a;关键在于将函数与函数名分开看待。同一个函数&#xff0c;在不同的执行方法下&#xff0c;会有不同的效果。如何来进行理解呢&#xff0c;…

HTTP首部---referrer 知识点

Referrer介绍 Referrer网站来路&#xff1b;访问者进入网站任何途径。HTTP Referer是header的一部分&#xff0c;当浏览器向web服务器发出请求的时候&#xff0c;一般会带上Referer,告诉服务器用户从那个页面连接过来的&#xff0c;服务器藉此可以获得一些信息用语处理。 获取…

JavaScript自执行匿名函数

格式&#xff1a;&#xff08;function(){//代码})();解释&#xff1a;这是相当优雅的代码&#xff08;如果你首次看见可能会一头雾水&#xff1a;&#xff09;&#xff09;&#xff0c;包围函数&#xff08;function(){})的第一对括号向脚本返回未命名的函数&#xff0c;随后一…

nginx使用gzip压缩文件---lz77算法---Haffman编码

为了提高页面的响应速度,可以从设置 nginx 的 gzip 和缓存这2方面入手,而为ttf,js,css等文件开启 gzip 和缓存能大大减少带宽的消耗. HTTP 的内容编码机制 Accept-Encoding 和 Content-Encoding 是 HTTP 中用来对[采用何种编码格式传输正文]进行协定的一对头部字段. 它的工作…

Javascript模块化编程

随着网站逐渐变成"互联网应用程序"&#xff0c;嵌入网页的Javascript代码越来越庞大&#xff0c;越来越复杂。 网页越来越像桌面程序&#xff0c;需要一个团队分工协作、进度管理、单元测试等等......开发者不得不使用软件工程的方法&#xff0c;管理网页的业务逻辑。…

zookeeper基础整理

zookeeper简述 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件 ZooKeeper 使用 Java 所编写&#xff0c;但是支持 Java 和 C 两种编程语言。 提供的功能包括&#xf…

JS模块化编程require.js简介

一、为什么要用require.js&#xff1f; 最早的时候&#xff0c;所有Javascript代码都写在一个文件里面&#xff0c;只要加载这一个文件就够了。后来&#xff0c;代码越来越多&#xff0c;一个文件不够了&#xff0c;必须分成多个文件&#xff0c;依次加载。下面的网页代码&…

CSS position属性

目前几乎所有主流的浏览器都支持position属性&#xff08;"inherit"除外&#xff0c;"inherit"不支持所有包括IE8和之前版本IE浏览器&#xff0c;IE9、IE10还没测试过&#xff09;&#xff0c;以下是w3school对position五个值的解释&#xff1a; 其中absol…

storm的并行度的解释--- ( 看完就能理解 )

关于storm的基础,参照我这篇文章:流式计算storm 关于并发和并行,参照我这篇文章:并发和并行 关于storm的并行度解释,参照我这篇文章:storm的并行度解释 关于storm的流分组策略,参照我这篇文章:storm的流分组策略 关于storm的消息可靠机制,参照我这篇文章:storm的消息可靠机…

jQuery选择器总结

jQuery 的选择器可谓之强大无比&#xff0c;这里简单地总结一下常用的元素查找方法 最基本的&#xff1a; $("#myELement") 选择id值等于myElement的元素&#xff0c;id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $("div") …

storm的流分组策略

关于storm的基础,参照我这篇文章:流式计算storm 关于并发和并行,参照我这篇文章:并发和并行 关于storm的并行度解释,参照我这篇文章:storm的并行度解释 关于storm的流分组策略,参照我这篇文章:storm的流分组策略 关于storm的消息可靠机制,参照我这篇文章:storm的消息可靠机…

CSS串联和后代选择器

串联选择器&#xff1a;作用在同一个标签上复制代码代码如下:<div class”a” id "qq"><span>look at the color</span></div></p> <p>css: #qq.a{….}后代选择器&#xff1a;作用在不同标签上复制代码代码如下:<div id &quo…

storm消息可靠机制(ack)的原理和使用

关于storm的基础,参照我这篇文章:流式计算storm 关于并发和并行,参照我这篇文章:并发和并行 关于storm的并行度解释,参照我这篇文章:storm的并行度解释 关于storm的流分组策略,参照我这篇文章:storm的流分组策略 关于storm的消息可靠机制,参照我这篇文章:storm的消息可靠机…

JS--Console.log()详解

对于JavaScript程序的调试&#xff0c;相比于alert()&#xff0c;使用console.log()是一种更好的方式&#xff0c;原因在于&#xff1a;alert()函数会阻断JavaScript程序的执行&#xff0c;从而造成副作用&#xff1b;而console.log()仅在控制台中打印相关信息&#xff0c;因此…

订单单量监控v2

前段时间做了一个订单单量监控的项目,已经投入使用了,现在总结一下 前期的想法参考这篇文章 整体使用了storm实时计算框架和redis数据库,还有kafka消息队列 先上效果图,我们可以后期将数据展示出来,明显发现某天00点有单量突变的情况,明显是促销活动导致单量增加了 而后面的报…

AFNetworking 3.0迁移指南

AFNetworking是一款在OS X和iOS下都令人喜爱的网络库。为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。如果你的项目以前使用过这些API&#xff0c;建议您立即升级到基于 NSURLSession 的API的AFNetworking的版本。本指南将引导您…

想法记录---实时计算的TopN的实现

TopN就是找出时间段内出现频率最高的n个 TopN的计算是个老生常谈的话题,比如微博的热搜,都是隔段时间就统计一次TopN 现在想做一个实时计算的TopN. 先说说离线计算的TopN,再说实时TopN 离线TopN 离线TopN一般出现在大数据的应用场景,使用hadoop的map reduce,网上有很多案例 …

iOS中的MVC设计模式

一、MVC概述模型&#xff0d;视图&#xff0d;控制器&#xff08;MVC&#xff09;是Xerox PARC在二十世纪八十年代为编程语言Smalltalk&#xff0d;80发明的一种软件设计模式&#xff0c;已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式&#xff0c;并且受到…

java 时间的相关转换操作

关于时间的操作,写了个util 主要用于预测的时候,时间段的确定 预测的时间段,需要明确的规定范围,由于业务的促销都是整点开始,所以我们的预测时间段,也是从整点开始 所以就要将时间分为多个整段,比如一分钟一段,那么就是2018-06-18 00:00:00 到2018-06-18 00:01:00 就是一段 那…