非对称加密算法

第十一章 非对称加密算法--DH

僤鯓⒐⒋嵵緔 提交于 2020-04-06 10:25:11
注意:本节内容主要参考自《Java加密与解密的艺术(第2版)》第8章“高等加密算法--非对称加密算法” 11.1、非对称加密算法 特点: 发送方和接收方均有一个密钥对(公钥+私钥),其中公钥传播,私钥自己保存,不需要传播 私钥不需要传播的特性解决了对称加密算法中密钥传播的困难(这个困难一般通过线下传递可以解决) 加密安全性极高,只用于一些电子商务网站,加解密速度远低于对称加密 一般情况下,为了解决非对称加密算法加解密速度低的问题,采用非对称加密(使用公钥+私钥对对称加密的密钥进行加解密)+对称加密(加解密数据)相结合的方式。 常见算法: DH(非对称加密的基石) RSA(非对称加密的经典,除了可用于非对称加密,也可用于数字签名,RSA--155(512位密钥)已被破解) ElGamal 11.2、DH(仅能用于密钥分配,不能加解密数据) 实现方式: JDK(密钥长度:512~1024中的64的整数倍) 几个概念: 密钥对:公钥+私钥 本地密钥:对称加密的密钥 整个流程: 1)甲乙双方初始化各自的密钥对 甲方构建出密钥对keyPair1-->乙方使用甲方的密钥对中的公钥publicKey1构建出自己的密钥对keyPair2 2)甲乙双方构建各自的本地密钥 甲方使用自己的私钥privateKey1+乙方的公钥publicKey2构建出自己的本地密钥key1

加密算法

我的梦境 提交于 2020-04-06 10:13:24
对称加密 : 发送方和接收方使用同样的密钥。比如DES。 好处:密文长度不受限制。 缺点:不安全 非对称加密: 发送方使用公钥将内容加密,接收方使用私钥将内容解密,比如RSA。 也可以发送方用私钥加密,接收方用公钥解密,这种情况只有一个公钥与私钥对应,应用于数字签名。 好处:密文长度受限制(密文的长度和密钥的长度成正比)。 缺点:相对对称加密比较安全。 混合加密: 集合了对称加密和非对称加密的优点。 比如对称加密的密钥为A。非对称加密的公钥的密钥为B,私钥为C。 发送方:用A对明文进行加密生成m,然后用B将A加密生成n,将m和n混合。 接收方:拆分m和n,用C将n解密得到A,用A将m解密得到明文。 数字签章: 利用hash算法将明文生成固定长度的密文。 数字签名: 数字签名需要达到以下两个目的: 1、对明文进行数字签名后不能被篡改 2、不能否认已经签过的数字签名 签名、解签过程:(说明:私钥m和公钥n是一对非对称加密密钥,并且一个私钥只有一个公钥与其对应) (1)发送方将明文A进行哈希得到h,将h用私钥m加密得到B,并将明文、B一起发送; (2)接收方将接收到的明文进行哈希后得到h1; (3)接收方用公钥n对B进行解密得到h2,如果能解密则就证明一定是发送方签过的,发送方不能否认(因为一个私钥m只对应一个公钥n); (4)将h1和h2进行对比,如果相同则表示没有被篡改; 过程图:

加密算法整理

给你一囗甜甜゛ 提交于 2020-03-28 02:41:05
加密算法简介    数据加密的基本过程就是对原来为明文的文件(或数据)按某种算法进行处理,使其成为不可读的一段密文,只能通过输入正确的密钥之后才能显示密文的原始信息。根据加密技术的不同,大致分为对称加密和非对称加密。   对称式加密就是加密和解密使用同一个密钥(secret key),通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典型的“对称式”加密法,它的Session Key长度为56bits。   非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为公钥(public key)和私钥(private key),这两个必需配对使用。这里的公钥是指可以对外公布的,私钥则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密方法如果是在网络上传输加密文件就很难不把密钥告诉对方,不管用什么方法都有可能被别窃听到。而非对称式的加密方法有两个密钥,且其中的公钥是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。 常见的加密算法 DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合; 3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的 密钥

浅谈加密算法

帅比萌擦擦* 提交于 2020-03-28 02:37:52
前言 数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。 正文 1. 数字签名 数字签名,简单来说就是通过提供 可鉴别 的 数字信息 验证 自身身份 的一种方式。一套 数字签名 通常定义两种 互补 的运算,一个用于 签名,另一个用于 验证。分别由 发送者 持有能够 代表自己身份 的 私钥 (私钥不可泄露),由 接受者 持有与私钥对应的 公钥 ,能够在 接受 到来自发送者信息时用于 验证 其身份。 注意 :图中 加密过程 有别于 公钥加密 ,更多 介绍戳这里 。 签名 最根本的用途是要能够唯一 证明发送方的身份 ,防止 中间人攻击 、 CSRF 跨域身份伪造 。基于这一点在诸如 设备认证 、 用户认证 、 第三方认证 等认证体系中都会使用到 签名算法 (彼此的实现方式可能会有差异)。 2. 加密和解密 2.1. 加密 数据加密 的基本过程,就是对原来为 明文 的文件或数据按 某种算法 进行处理,使其成为 不可读 的一段代码,通常称为 “密文”。通过这样的途径,来达到 保护数据 不被 非法人窃取、阅读的目的。 2.2. 解密 加密 的 逆过程 为 解密,即将该

打造属于你的加密Helper类

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

php常用加密函数和算法

♀尐吖头ヾ 提交于 2020-03-19 03:12:10
关键词: 不可逆: md5(); 计算字符串的 MD5 散列值 不可逆 默认返回32位的16进制 crypt(); 单向字符串散列 可以混淆盐值 不可逆 sha1(); 计算字符串的 sha1 散列值 默认返回值是一个 40 字符长度的十六进制数字。 不可逆 hash() hash($ago,$data); $ago是可以指定加密使用的哈希算法,例如:"md5","sha256","haval160,4" 等。$data是要加密的数据 不可逆 password_hash() – 对密码加密. $hash = password_hash($passwod, PASSWORD_DEFAULT); 现在PHP的官方都是推荐这种方式来加密用户的密码,很多流行的框架比如Laravel就是用的这种加密方式。 可逆: URL编码加密 urlencode() urldecode() url传递 保护特殊字符串使用 $str=" http://guojiadong.com?name= ".urlencode('guojiadong&123'); 可逆 Base64编码加密 base64_encode() base64_decode() base64加密本质上说就是把数据转换为ASCLL码 ,这会更有利于文件的传输,当然base64的作用在与文件的传输 可逆 PHP的openssl扩展

Java 加密 AES 对称加密算法

為{幸葍}努か 提交于 2020-03-13 15:38:58
版权声明:本文为博主原创文章,未经博主允许不得转载。 【AES】 一种对称加密算法,DES的取代者。 加密相关文章见: Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA 【代码】 代码比较多,有一部分非本文章内容代码,具体自己看吧。 [java] view plain copy package com.uikoo9.util.encrypt; import java.math.BigInteger; import java.security.MessageDigest; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import com.uikoo9.util.QStringUtil; /** * 编码工具类 * 1.将byte[]转为各种进制的字符串 * 2.base 64 encode * 3.base 64 decode * 4.获取byte[]的md5值 * 5.获取字符串md5值 * 6

iOS 用密钥对数据加密解密

╄→尐↘猪︶ㄣ 提交于 2020-03-11 03:09:14
引言 在iOS App开发中,我们需要对账户,密码等个人私密信息进行加密处理,从而保证用户信息的安全。那么可以将这些私密信息保存到钥匙串(keychain)中,因为钥匙串的不可见性,可以保证用户私密信息的安全。 值得注意的是,将明文存入钥匙串中是不安全的。因此可以将用户私密信息通过算法加密后再存进钥匙串中,这样就更进一步的保证了用户的信息安全。 常用的加密算法 加密算法 = 对称性加密算法 + 非对称性加密算法 说明:加密算法通常分为对称加密算法和非对称假面算法。 一、 对称加密算法: 原理:信息接收双方都需要事先知道密钥和加密解密算法,并且这个密钥是相同的,之后就可以对数据进行加密解密了。 常见的有:AES,DES,3DES: AES(Advanced Encryption Standard): 高级加密标准,是下一代的加密算法标准,速度快,安全级别高。 DES(Data Encryption Standard): 数据加密标准,速度较快,适用加密大量的数据。 3DES(Triple DES):是基于DES,对一块数据用三种不同的密钥进行三次加密,强度较DES更高。 二、 非对称性加密算法: 原理:通信双方A,B事先生成一个密钥对(私钥+公钥),然后A将自己的公钥发送给B,B也将自己的公钥发送给A,即通信双方将各自的公钥做一个交换。如果A要给B发送一条秘密电报

https原理通俗了解

我与影子孤独终老i 提交于 2020-03-02 09:06:19
摘要:本文尝试一步步 还原 HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样。但是这并不代表HTTPS的真实设计过程。在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于“还原”过程。 我们先不了聊HTTP,HTTPS,我们先从一个聊天软件说起,我们要实现A能发一个hello消息给B: 如果我们要实现这个聊天软件,本文只考虑安全性问题,要实现 A发给B的hello消息包,即使被中间人拦截到了,也无法得知消息的内容 如何做到真正的安全? 这个问题,很多人马上就想到了各种加密算法,什么对称加密、非对称加密、DES、RSA、XX、噼里啪啦~ 而我想说,加密算法只是 解决方案 ,我们首先要做的是理解我们的 问题域 —— 什么是安全? 我个人的理解是: A与B通信的内容,有且只有A和B有能力看到通信的真正内容 好,问题域已经定义好了(现实中当然不止这一种定义)。对于解决方案,很容易就想到了对消息进行加密。 题外话,但是只有这一种方法吗?我看未必,说不定在将来会出现一种物质打破当前世界的通信假设,实现真正意义上的保密。 对于A与B这样的简单通信模型,我们很容易做出选择: 这就是 对称加密算法 ,其中图中的 密钥S 同时扮演加密和解密的角色。具体细节不是本文范畴。 只要这个密钥S不公开给第三者,同时密钥S足够安全,我们就解决了我们一开始所定问题域了