数据的加密解密

所谓对数据的加密,即就是利用各种算法对数据进行封装,使通信双方能安全的进行数据通信,防止数据被篡改。
一.加密算法和协议
1.对称加密技术
对称加密技术是发送者和接收者采用相同的密钥进行对数据的封装和解封装
主流的对称加密算法有:
DES:此算法是将64位明文转变为64位密文,实际加密长度为56位,其余为校验位
3DES,DES3:是基于DES算法,使用三次56位密钥对数据进行加密
AES:
Blowfish:可参考https://baike.baidu.com/item/BLOWFISH/1677776?fr=aladdin
Twofish
IDEA
RC4,RC6
CAST5
特性:
(1.每对通讯主机都需要保有唯一的通信密钥,用于加密和解密数据
(2.将原始的数据分割成固定大小的块,逐个加密
(3.加密和解密的速度非常快
缺点:
(1.密钥分发困难
(2.在通信时必须要双方的密钥相同,则用户保存的密钥量大
2.非对称密钥
公钥加密算法:
密钥是由私钥和由私钥抽取生成的公钥组成;
私钥:512bits,1024bits,2048bits,4096bits,8192bits,16384
主流的公钥加密算法:
RSA:加密,数字签名;
DSA:Digital Signature Algorithm,数字签名算法;只能做数字签名;有时此算法也被称为
DSS,digital signature standard
Elgamal:
特性:
1.使用密钥进行加密和解密的时候,私钥加密的数据只能由与之对应的公钥才能解密
私钥:通过特定的工具随机创建生成,由使用者自己留存,务必保证其私密性;被称为“secret key”或“private key”
公钥:通过特定的工具从私钥中抽取生成,仅仅是私钥的一部分;公钥可以公开给所有人使用;被称为“public key”
2.私钥的长度都比较长,加密之后的数据安全等级较高;
缺陷:
加密数据的时候,消耗系统资源和时间都比较多,速度很慢;因此,极少用来加密大量数据
公钥加密算法的用途:
1.密钥交换:发送数据的一方使用接受数据一方的公钥加密对称加密算法的密钥,将加密后密钥发送给接收方
2.数字签名:确保数据传输过程中发送方的身份的正确性
单向加密算法(Hash加密算法,数据指纹算法):
只能加密不能解密,又称为“数据指纹提取”;数据指纹即数据的特征码;
主流的加密算法:
MD5,message digest version5,信息摘要算法第五版;
128bits定长输出
sha系列:security hash algorithm,安全的哈希算法
sha-1:160bits定长输出
sha224:224bits定长输出
sha256:256bits定长输出
sha384:384bits定长输出
sha512:512bits定长输出
认证协议:
密钥交换算法:
1.公钥加密
2.DH算法:Diffie-hellman
用于在通信双方生成一对用于公钥加密算法的密钥对

加密算法的应用:
1.通信双方互相交换各自的证书,并到信任的CA进行证书有效性认证
2.如果证书认证有效,发送方使用某种协商好的对称加密算法进行数据加密,对数据进行特征值抽取;再用自己的私钥加密抽取出来的特征值,以证明数据来源可靠性;发送方利用接收方的公钥加密对称加密算法的密钥
3.接收方在收到数据报文之后,先用自己的私钥解密对称加密算法的密钥;然后用发送方的公钥解密被加密的特征值,以证明数据来源可靠,再利用相同的单向加密算法计算数据的特征值,比较两个特征值是否相同以证明数据完整性;再用对称密钥解密加密的数据即可;
以CA为核心生成的一套安全架构体系:
PKI体系:Public Key Infrastructure,公钥基础设施;其包含的内容
1.签证机构:CA
2.注册机构:RA
3.证书吊销列表:CRL
4.证书存储库:CR
国际标准化组织(ISO)定义了证书的结构和认证标准:X.509协议标准
证书的组成包括:
证书的版本号:
证书的序列号:
有效期限:
签发算法的ID:
签发CA的名称:
主体的名称:
主体的公钥
主体的唯一标识符
发证者的唯一标识符
发证者的数字签名
扩展信息
CA如何发挥作用?
1.通信双方互相交换各自的证书
2.双方验证证书的真伪
3.双方协商加密算法
4.用CA颁发的公钥解密证书中的CA的签名,能解密说明证书来源可靠
5.用CA的加密算法加密证书,并取得特征值;与解密出来的特征值进行比较,如果相同,说明证书完整性由保证
6.检查证书的有效期是否合法,如果在有效期内,则证书可用
7.检查证书的主体名称和此次通信的目标是否能够对应
8.检查证书是否被吊销
能够实现上述安全加密功能的协议:
SSl:Security Socket Layer
1994年,Netscape(网景)公司最先声明并实施
SSL V1.0
SSL V2.0
SSL V3.0
TLS:Transport Layer Security,传输层安全协议
IETF:Internet Engineering Task Force,互联网工程项目小组
1999年提出TLS V1.0
2006年提出TLS V1.1
2008年提出TLS V1.2草案,添加了椭圆曲线加密算法
分层设计方案:
1.最底层,规定了基础算法的原语的实现:包括:AES,md5,sha,
2.向上一层:各种算法的基本实现
3.再向上一层:各种算法组合实现的半成品
4.最高层:用各种组件拼装而成的各种成品密码学协议软件
ssl/tls的handshake的四个阶段:
1.客户端向服务器索要证书并验证证书
发送Client Hello的消息,此消息主要内容
支持的协议的版本,如:SSl V3.0或TLS V1.2
客户端会生成一个随机数,稍后用于生成会话密钥
支持的加密算法,如:DES,3DES,AES,RSA
支持的压缩算法,如:gzip,bzip2,deflate
2.双方协商生成会话密钥
发送server hello消息,此消息主要内容
确认使用的协议的版本,如:TLS V1.2
服务器也生成一个随机数,稍后用于生成会话密钥
确认加密算法和压缩算法
服务器的证书
3.双方采用以及生成的会话密钥进行安全加密的数据通信
客户端验证服务器证书,在确认无误后,取出其中的服务器公钥
验证服务器证书的步骤
验证发证机构(CA)
验证证书的完整性
验证证书的持有者信息
验证证书的有效期
验证CA的吊销列表中是否有此证书
客户端发送信息给服务器端
客户端再次生成一个随机数,用于公钥加密
编码格式的变更通知,表示以后的信息都将采用双方已经协商好的加密算法和压缩算法
客户端握手结束
服务器收到的客户端发送来的第三个随机数(Pre_Master_key),计算生成此次会话用到的会话密钥,向客户端发送相关信息;
编码格式的变更通知,表示以后的信息都将采用双方已经协商好的加密算法和压缩算法
服务器端握手结束
4.双方互相结束通信

原文地址:http://blog.51cto.com/yigechenlin/2095144

时间: 2024-10-09 20:18:46

数据的加密解密的相关文章

iOS中使用RSA对数据进行加密解密

RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0.1j, openssl需要使用1.x版本, 推荐使用[homebrew](http://brew.sh/)安装. Java 8 RSA基本原理 RSA使用"秘匙对"对数据进行加密解密.在加密解密数据前,需要先生成公钥(public key)和私钥(private key). 公钥(publ

使用 GPG 对数据进行加密解密签名

一:使用 GPG 对数据进行加密解密签名 基本的工具使用 1. GPG 是GNUPG 免费开源的gpg加密工具,和同pgp兼容,pgp收费. 2. 在mac上使用https://gpgtools.org/ 下载安装之后,打开GPG Keychain mac程序, 可以点击新建创建一份自己的公钥和私钥,并把公钥上传到开源服务器上,各服务器间数据同步: 创建完成之后!我们对一个文件加密,解密,签名验证签名就可以了! 选中文件,右键,服务里面即可看到支持的工具 3. 在 windows 上使用 htt

MAC系统用RSA 对数据进行加密解密

创建密钥对 在终端中一次输入下面的脚本 openssl genrsa -out private_key.pem 1024 openssl req -new -key private_key.pem -out rsaCertReq.csr openssl x509 -req -days 3650 -in rsaCertReq.csr -signkey private_key.pem -out rsaCert.crt openssl x509 -outform der -in rsaCert.crt

iOS数据的加密解密

Base64编码解码: 基于64个可打印的字符来表示二进制数据的方法. Base64编码: - (NSString *)encode:(NSString *)string { //先将string转换成data NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; NSData *base64Data = [data base64EncodedDataWithOptions:0]; NSString *baseString

序列化和反序列化在浏览器和 Web 服务器之间传递的数据、加密解密

js中数组不能传递到后台,需进行json序列化: var data = new Array(); data.push({para1:name,para2:answer}); string data = JSON.stringify(data) //解析参数 JavaScriptSerializer js = new JavaScriptSerializer(); List<Dictionary<string, string>> answerList = js.Deserialize

linux下加密解密之OpenSSL

一.为什么要加密 在网络这个大森林里面,所有的数据传输都是不安全的,在数据传输中必须要给数据加密,以防止被别人劫持盗取 二.数据在网络中怎么传输 数据从发送出去到目的地都经过了哪些步骤? 1.ISO国际标准组织定义了数据在网络传输中的七层模型:数据从 应用层--会话层--表达层--传输层--网络层--数据链路层--物理层 逐层封装传输,数据到达最底层后传送出去,到达目标主机后在从底层往上层传输并逐层解压封装. 2.在TCP/IP定义的四层模型里,数据传输也是一样的道理,应用层--传输层--网络层

异或运算实现加密解密

异或运算中,如果某个字符(或数值)x 与 一个数值m 进行异或运算得到y,则再用y 与 m 进行异或运算就可以还原为 x ,因此应用这个原理可以实现数据的加密解密功能. 异或运算在java中通常有两个比较常用的方法,一个是两个变量的互换(不借助第三个变量),一个便是数据的简单加密解密. 两个变量的互换 java运算中,如果要交换两变量的值,通常的做法就是借助第三个临时变量,然后完成操作. 如 public static void main(String[] args) { int[] arr =

php rsa加密解密实例

php服务端与客户端交互.提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密 1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令: openssl genrsa -out rsa_private_key.pem 1024op

PHP rsa加密解密使用方法

php服务端与客户端交互.提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密 1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令: openssl genrsa -out rsa_private_key.pem 1024 o