加解密基础

加密解密相关概念

互联网上中间人攻击通常用的三种方式:1)窃听 2)数据篡改 3)会话劫持

密码算法协议的分类:

  1. a)  对称加密

常用的有:DES、3DES、AES、Blowfish、RC6、CAST5等

特性:1.加密、解密使用同一个密钥。

2.将原始数据分割成固定大小的块,逐个进行加密。

3.加解密速度快,密钥短。

  1. b)  非对称加密(公钥加密)

常用的有:RSA、DSA、DH

特性: 1.用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然。

2.公钥公开给所有人,私钥自己留存,必须保持其私密性。

其它一些介绍:

1.RSA可用于数字签名和密钥交换

2.DSA用于数字签名 (Digital SignatureAlgorithm)

3.基于大数运算的加密算法,降低了加解密的速度。一般来说只用于少量数据加密。一般采用对称加密算法加密其文件,然后用非对称算法加密对称算法所用到的对称密钥

4.DH仅适用于密钥交换

  1. c)  单向加密

常用的有: MD5、SHA-1、SHA224、SHA256、SHA384

特性:1.用于数据完整性校验

2.定长输出、雪崩效应

3.只能加密,不能解密,单向的运算

密钥交换算法:

DH算法只能用于密钥的交换,而不能进行消息的加密和解密。

DH 密钥交换算法的原理和过程如下:

有用户Alice 和Bob需要通信。

1.双方先确定2个大素数n和g,这两个数不能保密。

2.Alice再选择一个大随机数x,并计算A:A=g^x mod n

3.Alice将A发给Bob

4.Bob另外选择一个大随机数y,并计算B如下:B=g^y mod n

5.Bob将B发给Alice

6.计算秘密密钥K1,K1=B^x mod n

7.计算秘密密钥K2,K2=A^y mod n

最终结果一定是K1=K2,且K1、K2都没有暴露出来,因此Alice和Bob就可以用K1或者K2来进行加密和解密了。

公钥私钥的知识:

1,公钥和私钥成对出现

2,公开的密钥叫公钥,只有自己知道的叫私钥

3,用公钥加密的数据只有对应的私钥可以解密

4,用私钥加密的数据只有对应的公钥可以解密

5,如果可以用公钥解密,则必然是对应的私钥加的密

6,如果可以用私钥解密,则必然是对应的公钥加的密

公钥加密的2个功能:

1.身份验证/数字签名:【私钥加密数据,公钥来验证数字签名】

【例如:Alice生成两个数字,公钥a,私钥b。Alice用私钥b加密一段数据c(私钥签名),加密后结果为d,发给Bob,并告诉对方解密出的数据应该是c。如果Bob解密后确认是c,则一定是Alice发送的,因为能用公钥解密的数据,必然是对应的私钥加密的,私钥只有Alice存有,这样就确认了发送方是Alice,这个过程叫数字签名。】

2.数据加密:【公钥加密数据,私钥来解密】

【例如:Alice生成两个数字,公钥a,私钥b。将a发给Bob,告诉他这是公钥。这样Bob用公钥a加密了一段数据c,加密后的数据为d,放到网上,如果被人窃取了,但是没法被解开,因为不知道私钥b,只有Alcie自己知道私钥是b,只有Alice才能知道d解密后的内容。】

总结:

1,用公钥加密数据,用私钥来解密数据(数据加密)

2,用私钥加密数据,用公钥解密,来验证数字签名。在实际的使用中,公钥不会单独出现,总是以数字证书的方式出现,这样是为了公钥的安全性和有效性。

3. 由于公钥加密太费时间。一般只用在密钥交换时候,用公钥加密下。

下面的内容摘自博客:http://blog.itpub.net/21851324/viewspace-1023022/

SSL在通信中的应用:

Alice和Bob要进行安全的通信。很频繁,用公钥加密数据就不行了,原因:

1.Bob没有公私钥对,无法发消息(实际情况下,可以双方都有工私钥对)

2.公私钥加密都很费时间,影响速度。

Alice的公钥1是公开的,Bob找了个数字3,用Alice的公钥1,加密后发给Alice,说我们以后就用这个数字来加密信息吧,Alice解开后,得到了数字3,这样只有Alice和Bob知道这个秘密的数字3,别的人都不知道,因为他们既不知Bob挑了一个什么数字,加密后的内容他们也无法解开,我们把这个秘密的数字3叫做会话密钥。

然后,我们选择一种对称密钥算法,比如DES,(对称算法是说,加密过程和解密过程是对称的,用一个密钥加密,可以用同一个密钥解密),来加密我们之间的通信内容。别人因为不知道3是我们的会话密钥,因而无法解密。

【说明:对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加密解密。只要通信需要保密,密钥就必须保密】

总结一下:

1,SSL实现安全的通信

2,通信双方使用一方或者双方的公钥来传递和约定会话密钥 (这个过程叫做握手)

3,双方使用会话密钥,来加密双方的通信内容

实际使用中,比上面说的还要复杂很多。好在先驱们已经实现了这层Layer,取名为SSL(Secure Socket Layer)

OpenSSL:开源项目

三个组件:

openssl: 多用途的命令行工具

libcrypto: 公共加密库

libssl: 库,实现了ssl及tls

对称加密:

工具:openssl enc, gpg

算法:3des, aes, blowfish, twofish

enc命令:【man enc查看详细帮助】

加密:

openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext

openssl enc -e -des3 -a -salt -in fstab -out fstab

ciphertext -k 123456  #一步到位,设置密码为123456

解密:

openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab

单向加密:

工具:md5sum, sha1sum, sha224sum, sha256sum,..., openssl dgst

sha1sum inittab  和   openssl dgst -sha1 inittab   的结果一样。

md5sum inittab   和   openssl dgst -md5 inittab    的结果一样。

dgst命令:计算消息摘要

如:openssl dgst [-md5|-sha1] FILE   # 常用的两种计算摘要方式

openssl base64  -in file -out file.b64 # base64编码文件

openssl base64 -d -in file.b64 -out file.bin # base64解码文件

MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性

机制:

CBC-MAC

HMAC:使用md5或sha1算法

生成用户密码:

passwd命令

openssl passwd -1 -salt SALT  【-1 是数字1,不是字母,salt】

如:openssl passwd -1 -salt 123456

生成随机数:

openssl rand [-base64|-hex] NUM

支持-base64和-hex两种。

NUM: 表示字节数。-hex时,每个字符4位,出现的字符数为NUM*2;

如:openssl rand -hex 4   # 随机生成8位数的字符串

# 使用场景(如批量添加用户时,生成密码)

for ((i=1;i<=10;i++));do

useradd user$i &> /dev/null

p=$(openssl rand -hex 4)

echo $p |passwd --stdin user$i &> /dev/null

echo "user$i :$p" >>/tmp/add_user.txt

done

openssl加密命令基础:

生成密钥对儿:

# 生成私钥,再从私钥中提取出公钥。

openssl genrsa -des3 -out [私钥文件路径]  [密钥长度]   # 生成私钥,并对其进行des3加密【这样每次自己使用都要输入密码,一般都是有下面的这种】

(umask 077; openssl genrsa -out key.pri 2048)  # 生成私钥,不带密码加密。安全起见,设置文件权限600

提取出公钥:

如:openssl rsa -in server.key -pubout > pub.key 【公钥文件权限644】

随机数生成器:

/dev/random:仅从熵池返回随机数;随机数用尽,阻塞

/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数;非阻塞;

常见的用法:

echo $RANDOM|md5sum #生成随机数

或者下面3种方式都能生成随机数:

date +%N

head -200 /dev/urandom | cksum | cut -d" " -f1

cat /proc/sys/kernel/random/uuid| cksum | cut -d" " -f1

时间: 2024-10-01 09:11:46

加解密基础的相关文章

加解密入门基础知识

很多人都想学习解密,这东西刚入门时会让人沉迷进去,可以饭不吃.觉不睡.出现这种现像,也许是解密满足了人们的猎奇心里吧.但掌握这方面技术,对自身的 提高确实有好处.可以通过跟踪软件,提高自己的调试技能,并且能了解他人程序思路,使自己写出更好的程序.研究解密技术有助于掌握一些系统底层知识,系统 底层知识绝对是构造起大型软件的坚实基础.许多程序发展,都经历了这一锻炼过程的. 而大多数人可能认为解密是一门高深的学问.造成这种原因是以前这方面 的技术资料缺乏,从而将“解密”这一技能“神”化了.初学者一般不

Java基础加密之BASE64加解密

BASE64加解密,加密与解密实际是指编码(encode)和解码(decode)的过程,其变换是非常简单的,仅仅能够避免信息被直接识别. Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式. Base64使用A--Z,a--z,0--9,+,/ 这64个字符. Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的ASCII字符序列 Base64编码表 Value Encoding  Value Encoding  Value Encodin

PHP 基础篇 - PHP 中 DES 加解密详解

一.简介 DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥被忽略.所谓对称性加密即加密和解密密钥相同,对称性加密一般会按照固定长度,把待加密字符串分成块,不足一整块或者刚好最后有特殊填充字符. 跨语言做 DES 加密解密经常会出现问题,往往是填充方式不对.编码不一致或者加密解密模式没有对应上造成.常见的填充模式有: pkcs5.pkcs7.iso10126.ansix9

DES加解密算法的简单实现

前几天刚写完一个简单的DES算法的实验,拿来作为第一次发到博客的随笔,填充一下空空如也的博客,献丑了 因为主要目的是Easy-To-Understand,再现一个直观的DES加解密的过程,所以很浪费地每一个数据位都用一个short整型存储,用来理ying解fu过zuo程ye就好(虽说DES这种对称加密算法十多年前就已经被淘汰了,现在一般建议用AES或者DES3 “1973 年,美国国家标准局(NBS)开始征集一种标准的数据加密标准算法(DES),以用于非机密性政府机构.商业部门和民间的对非机密的

Android数据库安全解决方案,使用SQLCipher进行加解密

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952409 我们都知道,Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作.数据库存储是我们经常会使用到的一种存储方式,相信大多数朋友对它的使用方法都已经比较熟悉了吧.在Android中,我们既可以使用原生的SQL语句来对数据进行操作,也可以使用Android API提供的CRUD方法来对数据库进行操作,两种方式各有特点,选择使用哪

互联网服务器的实现过程需要考虑哪些安全问题 &amp; 加解密及哈希知识点

http://www.cnblogs.com/charlesblc/p/6341265.html 其中的一篇. 参考 https://zhuanlan.zhihu.com/p/20336461?refer=auxten 网络编程(四):互联网中TCP Socket服务器的实现过程需要考虑哪些安全问题? 在Internet环境下,安全问题我主要分为如下几类: 信息传输过程中被黑客窃取 服务器自身的安全 服务端数据的安全 首先,如果能用https,就尽量用https,能用nginx等常见服务器,就用

160829、Java加解密与数字签名

** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二.消息摘要算法加密————主要用于验证数据完整性. MD(消息摘要): SHA(安全散列) JDK实现和MD一样. BC实现如下:(Digest类) CC实现最简单(就是一个DigestUtils的静态方法): MAC(消息认证码)——含有密钥的散列函数算法 兼容MD和SHA的特性,但加入了密钥.

POCO库——Foundation组件之加解密Crypt

加解密Crypt:内部提供多种加解密方式.信息摘要提取.随机数产生等,具体的算法内部实现不做研究学习: DigestEngine.h :DigestEngine类作为各种摘要提取的基类,提供必要的接口:update:参数为提供将被提取的数据信息,digest:获取信息摘要,digestLength:获取信息摘要的长度: reset:重置将被提取的数据信息以重新产生信息摘要计算,digestToHex与digestFromHex:信息摘要与十六进制数据串相互转化,updateImpl:更新数据信息

11.Java 加解密技术系列之 总结

Java 加解密技术系列之 总结 序 背景 分类 常用算法 原理 关于代码 结束语 序 上一篇文章中简单的介绍了第二种非对称加密算法 — — DH,这种算法也经常被叫做密钥交换协议,它主要是针对密钥的保护.同时,由于水平的限制,打算这个系列就到此为止了,这篇文章就算是一个总结吧,回顾一下这几个月来都写了些什么. 背景 其 实,在开始写这个系列之前,我对于 Java 的加解密也并不是那么了解.之所以要写这些文章,还主要是由于工作的原因.记得几个月以前,当时项目要做一个数字证书,证书的生成.存储.传