1.加密
概念:
1.可以对任意二进制数据加密
2.非对称加密的出现使得密码学有了更广泛的用途:数字签名
1.1.对称加密
对称加密:
通信双方使用同一个秘钥,加密时使用加密算法配合秘钥加密,解密时使用解密算法配合秘钥进行解密
对此加密的经典算法:
DES(56位秘钥,秘钥太短而逐渐被放弃使用)、AES(128位,192位,256位秘钥,现在流行)
对称加密作用:
加密通信,防止信息在不安全的网络上被截获后,信息被人获取或者串改。
对称加密(AES)的破解
破解思路:
1.拿到一组或者多组 原文-密文 对
2.设法找到一个秘钥,这个秘钥可以将这些原文-密文对中的原文加密为密文,以及将密文解密为原文的组合,既为成功破解
反破解:
一种优秀的对称加密算法的标准是,让破解者找不到比穷举法更为有效的手段,并且穷举法的破解时间足够长
1.2.非对称加密
原理:使用公钥对数据进行加密得到密文;使用私钥对数据进行解密得到原数据。
由于私钥和公钥可相互解,因此非对称加密还可用于数字签名技术
直接对原数据签名会导致原数据不可读,所以通常会对原数据进行hash以后对hash签名,然后附加再原数据的后面作为签名。
使用非对称加密通信,可以在不可信网络上将双方的公钥传递给对方,然后在发消息前分别对消息使用对方的公钥来加密和使用自己的私钥来签名,做到不可信网络上的可靠秘钥传播以及加密通信
非对称加密的经典算法:RSA(可用于加密和签名)、DSA(仅用于签名。速度更快)
非对称加密的优缺点
1.优点:可以在不安全的网络上传输秘钥
2.缺点:计算复杂,性能相比对称加密差很多
非对称加密(如:RSA、ECDSA)的破解
破解思路
1.与对称加密相比,非对称加密的公钥非常容易获取,因此获得 原文-密文 对是非常容易的。
2.可以通过 原文-密文 对来解密密文。
3.可以通过公钥来推断出私钥。
1.3 秘钥与密码
1.密码:指的的各种登录密码,验证密码,提供数据来验证用户身份。
2.秘钥:是在加密解密场景下,用于数据的加密与还原,防止被盗取或串改。
2.编码
2.1 Base64
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后BinHex的版本使用不同的64字符集来代表6个二进制数字,但是不被称为Base64。Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
算法:将原数据每6位对应成Base64索引表中的一个字符排成一个字符串(每个字符占8位)
例:
单词 Man,对应Base64索引表 M-77 a-97 n-110;77的二进制01001101,97的二进制01100001,110的二进制01101110;然后取每6位对应的索引字符,010011 对应 19 对应 T,以此类推得到 TEFu。
如果Base64的末尾不足则补0
Base64的用途
1.将二进制数据扩充了存储和传输途径(例:可以将数据保存到文本文件,可以将数据通过聊天对话框发送,可以在URL中加入二进制数据)。
2.普通字符通过Base64后可以防止偷窥。
Base64缺点
数据进行Base64后会变大。
问题:“Base64加密图片传输更安全和高效”
1.Base64是编码,不是加密,另外Base64编码后会增加数据量,降低网络性能,增大用户流量。
2.Base64对图片的编码在于,在需要的时候可以用文本的形势来传输图片。
Base64的变种 Base58
比特币使⽤用的编码⽅方式,去掉了了 Base64 中的数字 "0",字⺟母⼤大写 "O",字⺟母⼤大写 "I",和字⺟母⼩小写 "l",以及 "+" 和 "/" 符号,⽤用于⽐比特币地址的表示。
Base58 对于 Base64 的改动,主要⽬目的在于⽤用户的便便捷性。由于去掉了了难以区分的字符,使得 Base58 对于「⼈人⼯工抄写」更更加⽅方便便。另外,去掉了了 "+" "/" 号后也让⼤大多数的软件可以⽅方便便双击选 取。
URL 使用的百分号编码 urlencode
在URL的字符串中,对一些不用于特殊用途的保留字符,使用百分号“%”为前缀进行单独编码,以避免出现解析错误。
urlencode是一个函数,可将字符串以URL编码,用于编码处理。
URL编码(URL encoding),也称作百分号编码(Percent-encoding), 是特定上下文的统一资源定位符 (URL)的编码机制。
适用于统一资源标识符(URI)的编码,也用于为"application/x-www-form-urlencoded" MIME准备数据, 因为它用于通过HTTP的请求操作(request)提交HTML表单数据。
3.压缩与解压缩
压缩:将数据使用更具有优势的编码算法进行编码。压缩也是编码。
解压缩:将压缩数据还原为原有模式,方便使用。
目的:减少数据占用的存储空间。
4.序列化
定义:
序列化不是编码,序列化是把数据对象(一般是内存中)转换为字节序列的过程。对象在程序内存里存放形式是散乱的(存放在不同的内存区域,并且由引用进行连接),通过序列化可以把内存中的对象转换成一个字节序列,从而使用byte[]数组等形式进行本地存储或者网络传播,在需要使用的时候进行反序列化组装,既还原数据。
目的:
让内存中的对象可以被存储和传播。
序列化与编码的区别:
编码是将数据由一种格式转换为另一种格式,序列化是把数据由内存中的对象(他不是某种具体的格式)转换为字节序列。
5.Hash
定义:
把任意数据转换成指定大小范围(通常在256个字节以内)的数据
Hash的实际用途:
1.验证唯一性。数据完整性的验证
例:从网络上下载文件,对比hash值是否与网络上提供的一样。
2.快速查找
例:HashMap
3.隐私保护
例:当重要数据必须暴露的时候,会选择同时暴露他的hash值,来验证数据是否为原数据。但是这不是加密,因为不可逆。
Hash是编码吗:是加密吗:
Hash是单向过程,不可逆,因此Hash既不是加密也不是编码。
6.字符集
字符编码(英语:Character encoding)、字集码是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。
在计算机技术发展的早期,如ASCII(1963年)和EBCDIC(1964年)这样的字符集逐渐成为标准。但这些字符集的局限很快就变得明显,于是人们开发了许多方法来扩展它们。对于支持包括东亚CJK字符家族在内的写作系统的要求能支持更大量的字符,并且需要一种系统而不是临时的方法实现这些字符的编码。
引用:Hencoder