公钥算法

比特币原理整理(一)

随声附和 提交于 2019-11-28 19:35:56
前几天研究了一下比特币,对这几天的研究结果做一个总结,里面有些内容是我自己的一些理解,如果有错误望指正,谢谢。 现在比特币这个词有多种含义,可能指代的是一种数字货币,也可能指代的是其底层的存储方式-区块链。本文中也不做区分,根据上下文文意,比特币可能表示数字货币,也可能表示区块链。 比特币是由中本聪发明的,中本聪这个名字可能是一个化名,其发表了一篇关于比特币的论文:《⽐特币:⼀个点对点的电⼦现⾦系统》,从此比特币正式进入人们的视野。2009年,开发人员将比特币进行了实现。 比特币使用分布式账簿记录网络中出现的每一笔交易。既然是分布式的账簿,也就意味着这个账簿会在网络中的很多机器上存储,网络中的机器使用P2P协议进行通信,将各自存储的账簿进行统一。网络中发生的交易也是通过P2P协议发送到网络中的其他机器上。比特币网络中没有所谓的中央管理机构,各个机器都是自主验证交易合法性,并将合法交易记录到分布式账簿中。 比特币中还涉及到公钥、私钥和地址的概念。每一个比特币交易都必须含有比特币持有人的私钥数字签名,否则比特币网络是不会接收该交易的。公钥在比特币网络中是公开的,用于对交易的合法性进行验证。地址用于表示收款人的地址。 上面这些是一些基础内容,我觉得有了上面这些基础知识就足够了。 我们作为一个普通用户使用比特币时,首先需要申请一个比特币的私钥。私钥是其实就是一个随机数,它是位于1--1

.NET Core 使用RSA算法 加密/解密/签名/验证签名

泪湿孤枕 提交于 2019-11-28 18:56:59
前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲。 RSA在.NET Core的改动 以前我们使用RSA加密主要是使用 RSACryptoServiceProvider 这个类,在.NET Core中也有这个类,但是这个类并不支持跨平台,所以如果你是用这个类来进行加/解密在windows上运行是完全没有错误的,但是只要你一放到Linux下就会出现异常。 查阅资料得知,要解决这个问题,需要改用 System.Security.Cryptography.RSA.Create() 工厂方法,使用它之后,在 Windows 上创建的是 System.Security.Cryptography.RSACng 的实例,在 Mac 与 Linux 上创建的是 System.Security.Cryptography.RSAOpenSsl 的实例,它们都继承自 System.Security.Cryptography.RSA 抽象类。 RSACng: 相关资料: https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.rsacng?view=netcore-2.0

RSA算法

◇◆丶佛笑我妖孽 提交于 2019-11-28 12:11:45
RSA算法是一种非对称加密算法,所谓非对称,就是指该算法需要一对秘钥,使用其中一个加密,则需要用另一个才能解密.秘钥分为公钥和私钥,私钥自己保存,公钥提供给对方. RSA加密和解密:加密就是使用对方的公钥对数据进行加密,然后发送给对方,接收方使用私钥进行解密. RSA签名和验签:使用私钥将明文进行签名生成密文串与明文一起传输.对方收到数据后使用公钥与明文和密文串进行验签.如果验签通过就说明:第一点,数据没有被修改过,第二点这些数据一定是私钥持有人发送的,因为私钥只有自己持有,这就起到了防抵赖的作用. 来源: https://www.cnblogs.com/qingmuchuanqi48/p/11406872.html

python实现RSA加密和签名以及分段加解密的方案

柔情痞子 提交于 2019-11-28 10:28:29
1、前言 很多朋友在工作中,会遇到一些接口使用RSA加密和签名来处理的请求参数,那么遇到这个问题的时候,第一时间当然是找开发要加解密的方法,但是开发给加解密代码,大多数情况都是java,c++,js等语言实现的,加解密的代码虽然有了,但是咱们身为一个测试,使用python做的自动化,并不是什么语言都会,这个时候就会比较尴尬了,看着这一团加解密的代码,自己却不知从何下手,再去找开发给写个python版本的,开发估计不一定搭理你,就算搭理你,开发也未必会python,那么今天咱们就来讲讲如何通过python来实现RSA加解密和签名 2、RSA算法简介: RSA加密算法是一种非对称加密算法,加密的秘钥是由公钥和私钥两部分组成秘钥对,公钥用来加密消息,私钥用来对消息进行解密,公钥是公开的,私钥则是用户自己保留的,由于公钥是公开的,那么任何人只要获取到公钥,都可以使用公钥来加密发送伪造内容,出于安全性考虑,在发送消息之前我们可以使用RSA来签名,签名使用私钥来进行签名,使用公钥来进行验签,通过签名我们可以确保用户身份的唯一性,从而提高安全性。 1、加密和签名的区别 加密:比方现在有两个人A和B,A要给B传递机密的信息,为了避免信息泄露,B事先通过RSA加密算法生成了一对秘钥,并且将公钥事先给到A,私钥则自己保留,A给B传递消息的时候,先使用B给的公钥对消息进行加密,然后再将消息传递给B

部分APP无法代理抓包的原因及解决方法

强颜欢笑 提交于 2019-11-27 23:12:09
引言 HTTP应用层的抓包已经成为日常工作测试与调试中的重要一环,最近接触新项目突然之间发现之前的抓包手段都不好使了,顿时模块与模块之间的前端与服务之间的交互都变成了不可见,整个人都好像被蒙住了眼睛。 其实自己也很早就发现平时使用的支付宝等APP使用Fiddler 或 Charles这类代理抓包软件默认情况下就无法抓取请求的,但使用Wireshark这类网卡抓包软件可以看到这些APP的流量,而已这些流量也表明这些APP使用的主要应用层协议仍然是HTTP(https),不过我们的代理抓包工具却失效了。如今终于在实际工作中遇到了,也不得不解决了,毕竟眼前有东西挡住会让我浑身不适。 代理抓包原理 为了弄明白为什么Fiddler 或 Charles对这些APP无效,我们有必要先了解代理抓包我原理(当然您不想了解也是完全可以的,直接看后面的 实际操作 就可以完成,原理分析什么的可以有兴趣随时回来看) Fiddler 或 Charles 这类使用的代理的抓包软件与Wireshark是完全不同的(Wireshark 使用的网卡数据复制,只要是经过指定网卡都会被抓取),其只能对使用代理的应用层网络协议生效,比如常见的HTTP(https),Websocket 。 这里以HTTP为例简单说明下 客户端需要完成一次HTTP请求,通常需要先找到服务器,客户端会根据http请求中url的主机名

应用层协议:HTTPS

╄→尐↘猪︶ㄣ 提交于 2019-11-27 21:27:13
1. HTTPS定义   Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本传输协议,网景公式设计了SSL(Secure Sockets Layer)协议用于对Http协议传输的数据进行加密,保证会话过程中的安全性。   缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure   两大作用:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。 2. 密码学基础  明文: 明文指的是未被加密过的原始数据。 密文:明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。 密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。 对称加密对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。 其加密过程如下:明文 + 加密算法 + 私钥 => 密文 解密过程如下:密文 + 解密算法 + 私钥 => 明文 对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。 其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因

RSA加密解密及RSA签名和验证

陌路散爱 提交于 2019-11-27 19:52:03
1.RSA加密解密:  (1)获取密钥,这里是产生密钥,实际应用中可以从各种存储介质上读取密钥 (2)加密 (3)解密 2.RSA签名和验证  (1)获取密钥,这里是产生密钥,实际应用中可以从各种存储介质上读取密钥 (2)获取待签名的Hash码 (3)获取签名的字符串 (4)验证 3.公钥与私钥的理解:  (1)私钥用来进行解密和签名,是给自己用的。  (2)公钥由本人公开,用于加密和验证签名,是给别人用的。 (3)当该用户发送文件时,用私钥签名,别人用他给的公钥验证签名,可以保证该信息是由他发送的。当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他接收到。 class RSACryption { #region RSA 加密解密 #region RSA 的密钥产生 /// <summary> /// RSA产生密钥 /// </summary> /// <param name="xmlKeys">私钥</param> /// <param name="xmlPublicKey">公钥</param> public void RSAKey(out string xmlKeys, out string xmlPublicKey) { try { System.Security.Cryptography.RSACryptoServiceProvider rsa

HTTP与HTTPS之面试必备

风流意气都作罢 提交于 2019-11-27 16:17:02
本文主要讲解Http与https的区别,以及https是怎样加密来保证安全的。 首先讲这俩个协议的简单区别: HTTP:超文本传输协议。 HTTPS:安全套接字层超文本传输协议HTTP+SSL HTTP:客户端和服务器端传递的是明文的消息。 HTTPS:将明文进行加密后再在客户端和服务器之前进行传递。 HTTP采用80端口,而HTTPS采用443端口。 HTTPS需要申请证书。 HTTPS采用非对称加密和对称加密两种加密方式来保证传输信息的安全性: 非对称加密:用公钥和私钥来加解密(有同学这里不懂的话可以看看资料)。 对称加密:加密解密都用同一套秘钥。 注:非对称加密更加安全,对称加密速度更快。 https的请求流程: 客户端(浏览器)向服务器请求https连接。 服务器返回证书(公钥)到客户端。 客户端随机的秘钥A(用于对称加密)。 客户端用公钥对A进行加密。 客户端将加密A后的密文发送给服务器。 服务器通过私钥对密文进行解密得到对称加密的秘钥。 客户端与服务器通过对称秘钥加密的密文通信。 上述过程中第2步骤中是存在风险的,因为公钥是暴露出来的,当公钥被中间人非法截获时,同时将公钥替换成中间人自己的公钥发送给客户端,从而得到对称加密的秘钥,进而伪装与客户端通信。 为了解决这种问题,就引入了数字证书与数字签名 所以在第2步骤时,服务器发送了一个SSL证书给客户端

HTTPS原理和CA证书申请

我怕爱的太早我们不能终老 提交于 2019-11-27 15:58:52
众所周知,WEB服务存在http和https两种通信方式,http默认采用80作为通讯端口,对于传输采用 不加密 的方式,https默认采用443,对于传输的数据进行 加密传输 目前主流的网站基本上开始默认采用HTTPS作为通信方式,一切的考虑都基于对安全的要求,那么如何对自己的网站配置HTTPS通信,是本文着重介绍的 本文的主要内容包括:https加密传输的原理、如何申请https所用的CA证书,如何配置WEB服务支持https 1、https原理通俗讲解 https=http+ssl,顾名思义,https是在http的基础上加上了SSL保护壳,信息的加密过程就是在SSL中完成的 首先我们先不谈https,先从一个简单的通讯原理图讲起: http通信原理 客户端发送一句client hello给服务器端,服务器端返回一句serverhello给客户端,鉴于本文讨论是https的加密主题,我们只讨论信息传输的加密问题 实现客户端和服务端发送的信息client hello 和server hello,即使中间的包被窃取了,也无法解密传输的内容 http:client hello和server hello在通讯的过程中,以明文的形式进行传输,采用wireshark抓包的效果如下图: 有没有感觉这个的信息传输是完全暴露在互联网上面,你请求的所有信息都可以被窥测到,是不是感觉心一凉

​​​​​​​RSA数字签名与加密、解密间的关系 

≡放荡痞女 提交于 2019-11-27 14:20:41
RSA数字签名与加密、解密间的关系 提及RSA,大家会想到公钥、私钥、加密、解密、数字签名、数字信封。。。 但也许大家和曾经的我一样,对其中的某些理解会存在误区,最近看了下关于RSA的RFC 2313文档,再加上自己的一些测试,终于理清了其中的一些关系,主要包括以下几点: 1、公钥和私钥间的关系; 2、数字签名和私钥加密间的关系; 3、数字签名的验证具体是怎样的过程; 公钥与私钥 一般,我们可以用RSA算法生成一对密钥,公钥发放给外部客户,私钥自己保管;有以下一些应用场景: 【公钥加密、私钥解密】或者【私钥加密、公钥验证】 对于第一种场景,似乎没有什么疑问;但是对于第二种场景,公钥验证时到底是如何验证法个人有个人的说法,我以前一直以为是和数字证书一样(当然这个理解有误,关于数字证书后续也会详述),只能验证不能被解密!但经过我的测试证明: 私钥加密是可以用公钥解密的 ;所以说对于RSA算法,用任何一方密钥加密都可以用另外一个密钥解密;这也从另外一个角度说明,其实 公钥和私钥是相对而言的 ,发放其中一个密钥出去,另外一个自然也就成为私钥了;对于该观点,很多同学都已经提到过,但我以前一直认为这是一个误解,汗自己一把; 另外,当我们使用证书的时候,比如pfx、cer、jks、rsa等,从中我们可以看出私钥比公钥暴露出了更多的信息,大家可以自行导出xml查看,当然其中很多参数是用来加速的