公钥加密

C++利用openssl进行公钥解密

半世苍凉 提交于 2020-03-28 02:47:44
私钥加密的部分内容,需要用公钥解密下面的实例代码,由于私钥加密后的字符串有不可打印字符,所以程序里面进行了base64,要用的时候先解dec base64 再传递给函数 进行解密 #include <stdio.h> #include <stdlib.h> #ifdef WIN32 #include <windows.h> #endif #include "openssl/rsa.h" #include "openssl/pem.h" #include "Base64.h" #ifdef WIN32 #pragma comment(lib,"User32.lib") #pragma comment(lib,"Advapi32.lib") #pragma comment(lib,"Gdi32.lib") #pragma comment(lib,"libeay32.lib") #pragma comment(lib,"ssleay32.lib") #endif // 私钥解密 std::string rsa_pri_decrypt(const std::string &cipherText, const std::string &priKey) { std::string strRet; RSA *rsa = RSA_new(); BIO *keybio; keybio = BIO

签名,验签的理解

蓝咒 提交于 2020-03-28 02:43:55
一、 公钥 加密 假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。 我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用 数字2,就是我的私钥,来解密。这样我就可以保护数据了。 我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥, 只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。 二、 私钥 签名 如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知 道我的公钥是1,那么这种加密有什么用处呢? 但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他 解密看是不是c。他用我的公钥1解密,发现果然是c。 这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。 这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是 数字签名 。 总结:公钥和私钥是成对的,它们互相解密。 公钥加密

RSA加密算法

匆匆过客 提交于 2020-03-28 02:39:20
RSA加密算法(Java实现) 注: 本博客并非原创,参考 https://leanote.zzzmh.cn/blog/post/5d1c661416199b0683002dc8 之前在公司实习的时候,进行前后端数据交互,采用明文传输的方式显然不够安全,综合网上的资料选择了 RSA 这种非对称加密算法,也是时下应用最广泛的加密算法之一,这里主要做一个记录,代码主要参考上面那篇博客的,特此感谢。 RSA加密算法 RSA非对称加密算法,加密和解密需使用不同的密钥,这在一定程度上就加大了破解的难度,公钥放在前端进行数据加密,服务端收到密文再利用密钥进行解密。 RSA的安全性依赖于大数的因子分解,这本身在数学中就是一大难题,一般密钥长度为 1024 位已经极难破解了,下面附上一张百度百科的照片。 这里只做一下简单的记录,以后有时间还需要好好研究研究。 代码实现 import java.util.Base64; import javax.crypto.Cipher; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java

C# Java间进行RSA加密解密交互

狂风中的少年 提交于 2020-03-28 02:31:10
引用:http://blog.csdn.net/dslinmy/article/details/37362661 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益,但没能解决我的实际问题,终于,还是被我捣鼓出来了。 首先,介绍一下写这代码的目的:完成webService验证问题,服务器端采用C#开发,客户端采用Java开发。服务器端给客户端提供公钥,已进行数据加密,客户端加密后提数据提交给服务器,服务器用私钥对数据解密,进行验证。 这里遇到的主要问题是C# RSACryptoServiceProvider类产生的公钥、私钥都是xml字符串数据,而java RSA算法要求的 Modulus、Exponent都是BigInteger类型,两者间的转换才是问题所在。 关于Java 和 C#各自独立的进行RSA加密解密,大家可以看整两篇文章, java RSA加密解密实现() 和 C#中RSA 加密解密和签名与验证的实现 。 接下来讲一下实现步骤: 首先由C# RSACryptoServiceProvider类生成公钥、私钥 /// <summary> /// 生成公钥、私钥 /// </summary> /// <returns>公钥、私钥,公钥键"PUBLIC",私钥键"PRIVATE"</returns> public

ssl-原理

元气小坏坏 提交于 2020-03-26 21:24:30
----------------------------------------------------SSL/TLS 介绍----------------------------------------------------------------------------------- 一: SSL/TLS 介绍 SSL 是安全套接层 (secure sockets layer), TLS 是 SSL 的继任者,叫传输层安全 (transport layer security)。 在明文的上层和 TCP 层之间加上一层加密,这样就保证上层信息传输的安全。如 HTTP 协议是明文传输,加上 SSL 层之后,就有了雅称 HTTPS。它存在的唯一目的就是保证上层通讯安全的一套机制。 SSL协议实现的安全机制包括: 数据传输的机密性:利用对称密钥算法对传输的数据进行加密。 身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的。 消息完整性验证:消息传输过程中使用MAC算法来检验消息的完整性。为了避免网络中传输的数据被非法篡改,SSL利用基于MD5或SHA的MAC算法来保证消息的完整性。 ----------------------------------------------------SSL/TLS 版本-----------------

公钥,私钥和数字签名这样最好理解

匆匆过客 提交于 2020-03-25 05:54:01
一、 公钥 加密 假设一下,我找了两串数字,一串是1*,一串是2*。我喜欢2*这串数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1*是我的公钥。 我有一个文件,不能让别人看,我就用1*加密了。别人找到了这个文件,但是他不知道2*就是解密的私钥啊,所以他解不开,只有我可以用 串2*,就是我的私钥,来解密。这样我就可以保护数据了。 我的好朋友x用我的公钥1*加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2*就是我的私钥, 只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。 二、 私钥 签名 如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2*是我的私钥),结果所有的人都看到我的内容了,因为他们都知 道我的公钥是1*,那么这种加密有什么用处呢? 但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2*,加密,加密后的内容是d,发给x,再告诉他 解密看是不是c。他用我的公钥1*解密,发现果然是c。 这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。 这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是 数字签名 。 总结:公钥和私钥是成对的

SSL CA 电子签章

时光怂恿深爱的人放手 提交于 2020-03-23 12:12:28
一、 SSL (Secure Socket Layer) 为 Netscape 所研发,用以保障在 Internet 上数据传输之安全,利用数据加密 (Encryption) 技术,可确保数据在网络 上之传输过程中不会被截取及窃听。目前一般通用之规格为 40 bit 之安全标准,美国则已推出 128 bit 之更高安全 标准,但限制出境。只要 3.0 版本以上之 I.E. 或 Netscape 浏览器即可支持 SSL 。 当前版本为 3.0 。它已被广泛地用于 Web 浏览器与服务器之间的身份认证和加密数据传输。 SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。 SSL 协议可分为两层: SSL 记录协议( SSL Record Protocol ):它建立在可靠的传输协议(如 TCP )之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL 握手协议( SSL Handshake Protocol ):它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。 SSL 协议提供的服务主要有: 1 )认证用户和服务器,确保数据发送到正确的客户机和服务器; 2 )加密数据以防止数据中途被窃取; 3 )维护数据的完整性,确保数据在传输过程中不被改变。 SSL 协议的工作流程:

RSA公钥文件解密密文的原理分析

三世轮回 提交于 2020-03-23 01:05:29
前言   最近在学习RSA加解密过程中遇到一个这样的难题:假设已知publickey公钥文件和加密后的密文flag,如何对其密文进行解密,转换成明文~~ 分析   对于rsa算法的公钥与私钥的产生,我们可以了解到以下产生原理: 公钥与私钥的产生 随机选择两个不同大质数 $p$ 和 $q$,计算 $N = p \times q$ 根据欧拉函数,求得 $r=\varphi (N)=\varphi (p)\varphi (q)=(p-1)(q-1)$ 选择一个小于 $r$ 的整数 $e$,使 $e$ 和 $r$ 互质。并求得 $e$ 关于 $r$ 的模反元素,命名为 $d$,有 $ed\equiv 1 \pmod r$ 将 $p$ 和 $q$ 的记录销毁 此时,$(N,e)$ 是公钥,$(N,d)$ 是私钥。 消息加密 首先需要将消息 $m$ 以一个双方约定好的格式转化为一个小于 $N$,且与 $N$ 互质的整数 $n$。如果消息太长,可以将消息分为几段,这也就是我们所说的块加密,后对于每一部分利用如下公式加密: $$ n^{e}\equiv c\pmod N $$ 消息解密 利用密钥 $d$ 进行解密。 $$ c^{d}\equiv n\pmod N $$ 我们可以知道,RSA公钥主要有两个信息:模数(modulus)和指数(exponent),也就是我们所说的N和e

打造属于你的加密Helper类

偶尔善良 提交于 2020-03-20 22:42:20
摘要 在我们软件系统设计中,数据的安全性是我们考虑的重中之重,特别像银行系统的设计账户和密码都需进行加密处理。这时我们可以使用加密算法对数据进行加密处理,这就是我们今天要介绍的主题。 首先让我们了解加密算法分为: 对称、非对称加密算法和Hash加密 。 对称加密算法:首先需要发送方和接收方协定一个密钥K。K可以是一个密钥对,但是必须要求 加密密钥和解密密钥之间能够互相推算出来 。在最简单也是最常用的对称算法中,加密和解密共享一个密钥。 非对称加密算法:首先得有一个密钥对,这个密钥对含有两部分内容,分别称作公钥(PK)和私钥(SK),公钥通常用来加密,私钥则用来解密。在对称算法中,也讲到了可以有两个密钥(分为加密和解密密钥)。但是,对称算法中的加解密密钥可以互相转换,而在非对称算法中,则不能从公钥推算出私钥,所以我们完全可以将公钥公开到任何地方。 正面 图1 .NET中对称加密算法 图2 .NET中非对称加密算法 通过上面.NET的对称和非对称加密算法类结构图,我们可以发现在.NET Framework中通过提供者模式实现加密算法动态扩展,SymmetricAlgorithm和AsymmetricAlgorithm类分别为对称和非对称算法的基类,接着通过扩展不同的算法类型(如:DES,TripleDES等),来动态地扩展不同类型的算法,最后是每种算法的具体实现Provider(如:

Https原理及流程

百般思念 提交于 2020-03-20 11:42:32
3 月,跳不动了?>>> 我们知道,HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。 密码学基础 在正式讲解HTTPS协议之前,我们首先要知道一些密码学的知识。 明文 : 明文指的是未被加密过的原始数据。 密文 :明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。 密钥 :密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。 对称加密 :对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。 其加密过程如下:明文 + 加密算法 + 私钥 => 密文 解密过程如下:密文 + 解密算法 + 私钥 => 明文 对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。