rsa加密算法

看完这篇文章,我奶奶都懂了https的原理

僤鯓⒐⒋嵵緔 提交于 2020-01-26 18:48:35
  前言   前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门: https://blog.csdn.net/ityouknow/article/details/80603617 ),文中讲到利用RSA来加密传输AES的秘钥,用AES来加密数据,并提供如下思路:   说人话就是前、后端各自生成自己的RSA秘钥对(公钥、私钥),然后交换公钥(后端给前端的是正常的明文公钥,前端给后端的是用后端公钥加密后的密文公钥;PS:其实我觉得直接交换两个明文公钥就行了),后端生成AES的 明文key ,用明文key进行AES加密得到 密文数据 ,用前端的公钥进行RSA加密得到 密文key ,API交互时 并将密文数据与密文key进行传输,前端用自己的私钥进行RAS解密的到明文key,用明文key进行AES解密得到明文数据;前端给后端发送数据时同理,这样一来,传输的数据都是密文,且只有秘钥才能解密   可惜这篇博客只提供了思路,但并没有具体的代码,我们在网上查找一下资料,开始生撸代码,实现一个前后端API交互数据加密——AES与RSA混合加密,并应用到项目中   后端加、解密   从网上查找工具类,再进行改造   先引入Base64工具类 <!-- Base64编码需要 --> <dependency> <groupId>org.apache.directory.studio<

看完这篇文章,我奶奶都懂了https的原理

百般思念 提交于 2020-01-04 03:34:43
  前言   前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门: https://blog.csdn.net/ityouknow/article/details/80603617 ),文中讲到利用RSA来加密传输AES的秘钥,用AES来加密数据,并提供如下思路:   说人话就是前、后端各自生成自己的RSA秘钥对(公钥、私钥),然后交换公钥(后端给前端的是正常的明文公钥,前端给后端的是用后端公钥加密后的密文公钥;PS:其实我觉得直接交换两个明文公钥就行了),后端生成AES的 明文key ,用明文key进行AES加密得到 密文数据 ,用前端的公钥进行RSA加密得到 密文key ,API交互时 并将密文数据与密文key进行传输,前端用自己的私钥进行RAS解密的到明文key,用明文key进行AES解密得到明文数据;前端给后端发送数据时同理,这样一来,传输的数据都是密文,且只有秘钥才能解密   可惜这篇博客只提供了思路,但并没有具体的代码,我们在网上查找一下资料,开始生撸代码,实现一个前后端API交互数据加密——AES与RSA混合加密,并应用到项目中   后端加、解密   从网上查找工具类,再进行改造   先引入Base64工具类 <!-- Base64编码需要 --> <dependency> <groupId>org.apache.directory.studio<

欧拉函数的应用-RSA加密算法

余生长醉 提交于 2019-12-10 07:16:24
若p和q互质,令n = p*q 则ola(n) = (p-1)*(q-1) 我们知道p和q的值能轻易知道(p-1)*(q-1)的值也就是ola函数的值,但是仅仅知道n是多少,却非常难得到p和q是多少,因为当n很大时,例如有几百位时,它就有非常多的质因数,要暴力穷举很长时间。所以这就保证了RSA加密算法的可靠性。 RSA加密是非对称加密,密钥 由公钥和私钥组成。 公式为: (明文)^e % n = 密文 其中, e 是一个小于n且与n互质的数。 (密文)^d % n = 明文 d = ( 1 + k*ola(n) ) / e (在此处, k和d都必须是正整数。) 将明文的e次方对n取余后得到密文。 将密文的d次方对n取余后得到明文。 所以 加密用公钥(e, n) 解密用私钥(d, n) 你构造出一个密钥对之后,将公钥发给别人,别人通过公钥加密,在发送给你,你在用公钥解密,就完成了明文加密传输。 所以我们首先要构造两个质数p和q 则 n = p*q ola(n) =(p-1)* (q-1) 然后随机构造一个小于n并且与n互质的数 e。 得到 e n ola(n) 之后 就剩下d了 d = ( 1 + k*ola(n) ) / e 因为d和k一定是正整数 所以我们可以从1开始枚举k,直到求出的d是一个正整数。 或者是将等式变化为 d*e - k*ola(n) = 1 由扩展欧几里得求解d

C#开发中常用的加密解密方法

假如想象 提交于 2019-12-09 22:56:37
转载自: https://www.cnblogs.com/bj981/p/11203711.html C#开发中常用的加密解密方法 相信很多人在开发过程中经常会遇到需要对一些重要的信息进行加密处理,今天给大家分享我个人总结的一些加密算法: 常见的加密方式分为可逆和不可逆两种方式 可逆:RSA,AES,DES等 不可逆:常见的MD5,SHAD等 一、MD5消息摘要算法 我想这是大家都常听过的算法,可能也用的比较多。那么什么是MD5算法呢?MD5全称是message-digest algorithm 5,简单的说就是 单向的加密, 也就是说 无法根据密文推导出明文。 MD5主要用途: 1、对一段信息生成信息摘要,该摘要对该信息具有唯一性,可以作为数字签名 2、用于验证文件的有效性(是否有丢失或损坏的数据) 3、对用户密码的加密 4、在哈希函数中计算散列值 从上边的主要用途中我们看到,由于算法的某些不可逆特征,在加密应用上有较好的安全性。通过使用MD5加密算法,我们输入一个任意长度的字节串,都会生成一个128位的整数。所以根据这一点MD5被广泛的用作密码加密。下面我就像大家演示一下怎样进行密码加密。 首先需要引入命名空间,先看一个比较简单的MD5加密的例子: using System.Security; using System.Security.Cryptography; public

加密IIS站点的Web.config节点

旧时模样 提交于 2019-12-05 17:50:24
1 准备知识 1.1 指定受保护的配置提供程序 .NET Framework 中的受保护配置提供程序: DpapiProtectedConfigurationProvider 。使用 Windows 数据保护 API (DPAPI) 对数据进行加密和解密。 RsaProtectedConfigurationProvider 。使用 RSA 加密算法对数据进行加密和解密。 这两种提供程序都可以对数据进行强加密。但是,如果计划在多台服务器(Web 场)上使用相同的加密配置文件,则只有通过 RsaProtectedConfigurationProvider 才能导出加密密钥,并将其导入其他服务器。当然,也可以通过 .NET Framework,也可以 自行定义受保护配置提供程序 。 1.2 导入和导出受保护的配置 RSA 密钥容器 1.2.1 创建秘钥容器 创建一个名为 SampleKeys 的 RSA 密钥容器,该容器是可导出的计算机级密钥容器。 aspnet_regiis -pc "SampleKeys"–exp 注: Aspnet_regiis.exe 工具位于 %windows%\Microsoft.NET\Framework\versionNumber 文件夹中。 1.2.2 授予对 RSA 密钥容器的访问权限 默认情况下,RSA 密钥容器受到所在服务器上的 NTFS

Linux 实现ssh基于key认证

走远了吗. 提交于 2019-12-03 07:38:45
  众所周知ssh是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,它默认工作在tcp的22号端口,具体实现的软件有:openssh(centos默认安装的),dropbear。ssh协议目前有两个版本v1和v2,v1基于CRC-32做MAC,不安全。v2基于DH算法做密钥交换,基于RSA或DSA实现身份认证。所以目前大多流行的Linux都是使用的V2版本。   简单了解了下ssh,我们再来说说他的两种用户登录认证,第一种基于用户名口令的方式,这个方式大家都应该知道,就是我们要想登录Linux,必须要输入相应的用户名口令才可以登录到远程Linux系统,这种方式是交互式方式登录。第二种就是我们今天要说的基于key的方式认知登录。   首先我们来了解下ssh加密通讯的过程   从上图可以看到,客户端上必须存在一对密钥对,我们都知道密钥是成对出现,况且用A的公钥加密只有A的私钥才可以解密。正是因为非对称加密的这个特性,我们不难理解ssh通信也是利用这个特性来确定数据安全的。在服务端也有一对公钥和私钥,它存在的目的也是为了加密和解密数据。ssh加密通讯的流程大致上这样的,客户端要和服务端加密通信,首先客户端需要拿到服务端的公钥,拿到服务端的公钥后,就可以用服务端的公钥对要发送到数据加密,然后发送到服务端,服务端收到这个密文的数据,它会用自己的私钥去解密

RSA加密算法原理及其Java实现

烂漫一生 提交于 2019-12-02 05:41:28
简单介绍了RSA加密算法的原理及其Java实现 RSA加密算法的基本原理 主要步骤 本文所有的字母都为正整数。 其主要步骤如下: 1、取两个不相等的质数p、q,一般都比较大。例如:p=67,q=79。 2、n=p×q,其中n所对应的二进制长度即为密钥的长度,一般为1024位或2048位。n=67×79=5293,转化为二进制数为1 0100 1010 1101,共13位。 3、计算n的欧拉函数f(n): 欧拉函数f(n)定义为:小于n的正整数中和n组成互斥关系的正整数的个数。由欧拉函数的性质:(1)如果正整数可以分解为两个互斥整数之积,则有该正整数的欧拉函数等于两个互斥整数的欧拉函数之积;(2)如果整数为质数,其欧拉函数为该整数减一。则有: f ( n ) = f ( p ) ∗ f ( q ) = ( p − 1 ) ∗ ( q − 1 ) (1) f(n)=f(p)*f(q)=(p-1)*(q-1)\tag{1} f ( n ) = f ( p ) ∗ f ( q ) = ( p − 1 ) ∗ ( q − 1 ) ( 1 ) f(n)=66×78=5148 4、任选一整数x满足1<x<f(n),且x与f(n)互斥。选x=19 5、计算x关于f(n)的模反元素y,即满足: ( x ∗ y ) % f ( n ) = 1 x y = h f ( n ) + 1 (2) (x*y)

Spring Boot 支持https

半腔热情 提交于 2019-11-30 13:14:28
1. 生成key JDK下 keytool -genkeypair -alias mySSL -keyalg RSA -keystore E:\tomcat.key 其中-alias是证书的别名,RSA是加密算法,-keystore后是输出证书的路径所在 2. spring boot 配置ssl使用https 代码 https://github.com/spring-projects/spring-boot/tree/v1.5.9.RELEASE/spring-boot-samples/spring-boot-sample-tomcat-multi-connectors postman关闭https验证 参考:https://www.cnblogs.com/lianggp/p/8136540.html 来源: https://www.cnblogs.com/xiang--liu/p/11590687.html