公钥算法

学习笔记之RSA算法原理与应用

折月煮酒 提交于 2019-12-02 05:15:41
工作中遇到SSH的时候实在多,关于密钥分发也是重要的任务。那公钥和私钥是怎么产生的,RSA算法原理是什么?强迫症患者当然不满足仅仅是what and how,自然要知道why。华章译丛的数学专著我向来喜欢,那本《初等数论及应用(原书第六版)》就成了我接下来要面对的任务。 然后做了读书笔记,方便以后复习理解。我实在没有时间手打文字贴上来,只好就着图片放出来了. 既然知道密钥对的原理,下面来梳理一下它的应用。 一.使用RSA算法的步骤: 1.接收方生成一个公钥+私钥的密钥对; 2.私钥由接收方妥善保管,公钥发给发送方(宇宙众生皆可盗取); 3.发送方用收到的公钥对发送信息进行加密形成密文,然后发给接收方; 4.接收方收到密文后,用司机的私钥解密成明文。 二.使用消息认证码的步骤: 1.发送方与接收方事先共享会话密钥(万万不可公开); 2.发送者使用共享密码对消息计算MAC值(将密钥和数据同时作为输出); 3.发送方将消息和MAC值一起发给接收方; 4.接收方收到消息后使用共享密钥计算消息的MAC值,与收到的MAC值对比; 5.若2个MAC值一致,则认为消息来源正确且未经篡改。 三.数字签名的使用步骤: 数字签名不是为了保证消息机密性,主要是为了识别篡改和伪装,可以复制且有效。 1.发送者产生密钥对(此处不再是接收者),私钥给自己,公钥给接收者,保证公钥来自真正的发送方是至关重要的环节;

一次看懂 Https 证书认证

情到浓时终转凉″ 提交于 2019-12-02 05:10:32
TLS 传输层安全性协定 TLS(Transport Layer Security),及其前身安全套接层 SSL(Secure Sockets Layer)是一种安全协议,目的是为网际网路通信,提供安全及数据完整性保障。 如图, TLS 在建立连接时是需要 客户端发送 ClientHello(包含支持的协议版本、加密算法和 随机数A (Client random) )到服务端 服务端返回 ServerHello、公钥、证书、 随机数B (Server random) 到客户端 客户端使用CA证书验证返回证书无误后。生成 随机数C (Premaster secret) ,用公钥对其加密,发送到服务端 服务端用 私钥 解密得到 随机数C (Premaster secret) ,随后根据已经得到的 随机数ABC生成对称密钥(hello的时候确定的加密算法) ,并对需要发送的数据进行对称加密发送 客户端使用对称密钥(客户端也用随机数ABC生成对称密钥)对数据进行解密。 双方手持对称密钥 使用对称加密算法通讯 而这一流程 服务端的证书 是是至关重要的。 证书 证书用来证明公钥拥有者身份的凭证 首先我们需要知道 证书是怎么来的。 数字证书一般由数字证书认证机构签发,需要 申请者通过 非对称加密算法(RSA) 生成一对 公钥 和 密钥 ,然后把需要的申请信息(国家,域名等)连同公钥发送给

加密、解密、数字签名和数字证书详解

大兔子大兔子 提交于 2019-12-02 03:22:31
1. 概述 随着电子商务的迅速发展,信息安全已成为焦点问题之一,尤其是网上支付和网络银行对信息安全的要求显得更为突出。为了能在因特网上开展安全的电子商务活动,公开密钥基础设施(PKI, Public Key Infrastructure)逐步在国内外得到广泛应用。我们是否真的需要PKI,PKI究竟有什么用?下面通过一个案例一步步地来剖析这个问题。 2. 案例 2.1 案例内容 甲想将一份合同文件通过Internet发给远在国外的乙,此合同文件对双方非常重要,不能有丝毫差错,而且此文件绝对不能被其他人得知其内容。如何才能实现这个合同的安全发送? 2.2 问题1 问题1 :最自然的想法是,甲必须对文件加密才能保证不被其他人查看其内容。那么,到底应该用什么加密技术,才能使合同传送既安全又快速呢?   可以采用一些成熟的 对称加密算法 ,如DES、3DES、RC5等对文件加密。对称加密采用了对称密码编码技术, 对称加密的特点是文件加密和解密使用相同的密钥 ,即加密密钥也可以用做解密密钥,这种方法在密码学中叫做对称加密算法, 2.3 问题2 问题2: 如果黑客截获此文件,是否用同一算法就可以解密此文件呢?   不可以,因为加密和解密均需要两个组件:加密算法和对称密钥,加密算法需要用一个对称密钥来解密,黑客并不知道此密钥。 2.4 问题3 问题3: 既然黑客不知密钥

非对称加密RSA的C#实现

孤人 提交于 2019-12-02 02:57:28
1.对称加密算法 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。 对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥, 一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密, 不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。 密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。 常用对称加密:DES、3DES、AES等 (代码后续添加) 2.非对称加密算法 非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。 私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。 比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。 与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。 常用非对称加密:DSA、RSA等 目前C

浅析数据库安全技术

蓝咒 提交于 2019-12-01 18:37:13
一、数据库安全问题 数据库安全问题分为两类: (1) 信息运输中的问题:偷看、假冒、篡改和抵赖; (2) 数据库内部的问题:非法数据访问(读取非允许的数据、改/删/加非允许的数据) 二、信息传输过程中的安全管理 运输过程中,最行之有效的技术就是密码技术。 如下图所示: 一般使用非对称加密技术。用私钥(SK)加密的内容只能用公钥(PK)解密. 1、非对称加密技术的介绍 1.A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥 2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。 3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。 4.A将这个消息发给B(已经用B的公钥加密消息)。 5.B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。 2、非对称加密技术的使用 (n,d)(n,d) 构成公钥 PKPK ,可以告诉别人; (n,e)(n,e) 构成私钥 SKSK,不让任何人知道。(私钥具有唯一性) 数字签名:给别人发送的消息时,使用SKSK加密签名,别人用PKPK 解密得到签名就可以证明信息是由你发送的。 3、RSA-一种常用的非对称加密算法 关于RSA算法的介绍请参见:RSA算法 下面给出RSA秘钥生成的一个例子: 例子来自于:RSA算法原理(二) 第一步,随机选择两个不相等的质数p和q。

C# 网络加密与解密

天涯浪子 提交于 2019-12-01 13:20:29
     数据在网络传输过程中的保密性是网络安全中重点要考虑的问题之一。由于通过网络传递数据是在不安全的信道上进行传输的,因此通信双方要想确保任何可能正在侦听的人无法理解通信的内容,而且希望确保接收方接收的信息没有在传输期间被任何人修改,最好的办法就是在传输数据前对数据进行加密,接收方接收到加密的数据后再进行解密处理,从而保证数据的安全性。   在.NET 库的System.Security.Cryptography 命名空间中,包含多种加密数据的类,涉及多种加密算法。加密方法主要分为两大类:对称加密和不对称加密。 1 对称加密   对称加密也称为私钥加密,采用私钥算法,加密和解密数据使用同一个密钥。由于具有密钥的任意一方都可以使用该密钥解密数据,因此必须保证该密钥不能被攻击者获取,否则就失去了加密的意义。   私钥算法以块为单位加密数据,一次加密一个数据块。因此对称加密支持数据流,是加密流数据的理想方式。   .NET 类库使用的私钥算法有RC2、DES、TripleDES 和Rijndael。这些算法通过加密将n字节的输入块转换为加密字节的输出块。如果要加密或解密字节序列,必须逐块进行。由于n很小(对于RC2、DES 和TripleDES 算法,n 的值为8 字节、16 字节或24 字节,默认值为16字节;对于Rijndael 算法,n 的值为32 字节)

使用ssh-keygen生成私钥和公钥

穿精又带淫゛_ 提交于 2019-12-01 12:26:18
1.使用ssh-keygen生成私钥和公钥 命令如下: ssh-keygen -t rsa 例子: fdipzone@ubuntu:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/fdipzone/.ssh/id_rsa): 这里输入要生成的文件名 Enter passphrase (empty for no passphrase): 这里输入密码 Enter same passphrase again: 这里重复输入密码 Your identification has been saved in /home/fdipzone/.ssh/id_rsa. Your public key has been saved in /home/fdipzone/.ssh/id_rsa.pub. The key fingerprint is: f2:76:c3:6b:26:10:14:fc:43:e0:0c:4d:51:c9:a2:b0 fdipzone@ubuntu The key's randomart image is: +--[ RSA 2048]----+ | .+=*.. | | . += + | | o oo+ | | E

PHP RSA签名

喜夏-厌秋 提交于 2019-12-01 11:45:26
签名算法: Setp.1 确定待签名参数 在请求参数列表中,除去sign参数外,其他需要使用到的参数皆是要签名的参数。 在通知返回参数列表中,除去sign参数外,凡是通知返回回来的参数皆是要签名的参数。 Setp.2 对参数进行排序 对于待签名的所有参数,需要根据参数名首字符字典顺序(ascii值大小)排序,若遇到相同首字符,则判断第二个字符,以此类推。 Setp.3 生成待签名字符串 将排序后的待签名参数以“&“符号拼接, 形如:“参数名1=参数值1&参数名2=参数值2&….&参数名N=参数值N”。 Setp.4 生成签名/验证签名 生成签名:把待签名字符串与商户的私钥一同放入RSA的签名函数中进行签名运算,从而得到签名结果字符串(sign值)。 验证签名:把待签名字符串、平台提供的公钥、通知返回参数中的参数sign值三者一同放入RSA的签名函数中进行签名运算,来判断签名是否验证通过。 1、公钥、私钥格式化(加上前后戳、每64位进行换行) /**********************************私钥格式化*************************************/ 1 function formatPriKey($priKey) { 2 $fKey = "-----BEGIN PRIVATE KEY-----\n"; 3 $len = strlen(

比特币里的计算机知识

[亡魂溺海] 提交于 2019-12-01 10:24:56
比特币里的计算机知识 一、人民币、支付宝和比特币有什么区别 (1)人民币 大家都很清楚,人民币就是中国人民银行发行的货币。这些货币流通到市场中,每个人有了钱以后可以去购买各种商品和服务,人民币就会从一个人手里转到另外一个人手里。钱流通到市场中后,具体某一个编号的纸币在某个特定的时候在谁身上是不确定的,国家也不关心。纸币在实际中是很难复制的,复制成本高、风险也很大。 (2)支付宝 支付宝,当然包括微信,里面的余额说白了就是一个数据,存储在支付宝和微信公司的服务器上。同人民币不同,数据的复制、修改是不需要成本的。这些电子货币在市场上是怎样运行的?以支付宝为例,首先你要申请一个支付宝账户,然后关联一张银行卡,这样你就可以把支付宝中的钱转出到银行卡或者将银行卡的钱充值到支付宝中。当你消费时利用支付宝付款或者营收通过支付宝收款时,对方也必须要有一个支付宝账号,这样付多少钱实际上是从你的支付宝账号上扣款,给对方支付宝账户加钱。 这其中涉及到两个方面的数据变动。一是和银行相关:支付宝在各大银行都开了一个账号,个人在用银行卡往自己的支付宝账号充值或者提现,实际上是银行中支付宝那个大账号和你的账号之间的存款变动。当然支付宝公司会将你支付宝账号上的数值进行相应的变动。二是和银行无关,支付宝内部数据转换。当你和对方之间一个用支付宝进行付钱、另一个进行收钱,这个时候就跟银行没有关系

javaweb项目使用RSA算法

陌路散爱 提交于 2019-12-01 07:42:59
1. RSA 算法介绍 RSA 算法是一种非对称算法,即是加密的密码和解密的密码是不一致的。因此对 RSA 的加密和加密的密码分为公钥和私钥。根据 RSA 的算法介绍,只要密钥的长度足够长,现在没有任何方法可以破解。而且这个算法的专利已经在 2000 年 9 月 21 日失效,因此应该是可以任意使用的。 密钥获取: 选用 PKCS#8 生成密钥,选 PKCS#1 可能会导致解密失败 http://web.chacuo.net/netrsakeypair 1. javaweb 使用 RSA 1.1. 前端加密 要在前端加密密码,就要使用到jsencrypt 的 js 1.1.1. jsencrypt 下载 官网: http://travistidwell.com/jsencrypt/ github: https://github.com/travist/jsencrypt/releases 在 bin 目录下面可以找到相关 js : 1.1.2. 代码示例 1 //RSA加密 2 function encryptRequest(reqUrl, data) { 3 var publicKey = "****"; 4 var encrypt = new JSEncrypt(); 5 encrypt.setPublicKey(publicKey); 6 // ajax请求发送的数据对象 7