安全与加密

数据在传输的时候是以广播的方式一个一个路由的发送到明白主机,当有心之人想要截取我们的数据,只要在数据包的所走的路径上的任意一环上接入他们的设备就可以获取我们的通信信息。我们想保证自己通信的私密性,需要把我们通信的数据加密,传输给对方解密后才可以看到正常的通信信息。

数据加密前我们要了解数据传输的流程:数据传输时分为4层的,应用层,传输层,网络层,网际层。其中下三层都是定义好的规范,我们的数据只好在应用层做手脚,这时我们需要一个软件在我们发送数据前把数据加密,然后进行数据包的封装传输。

既然已有数据加密的位置,这里需要定义加密的算法,数据加密分为三种:1对称加密,2单向加密,3非对称加密。既然是加密算法并且大家都要使用,那么就需要把算法公布出来(不公布算法直接发布软件让别人使用,这种行为想想都害怕,怎么保证发布软件的人不破解我们的数据)。

算法是公开的那么怎么保证数据加密,这就需要使用不同密钥,就好比锁家家都使用,但是只有我们自己的钥匙可以开自己家的们。

一单向加密

单向加密的作用是保证文件的独特性,有时我们传输一个文件我们不要求这个必须是保密的,但是我们要求这个文件必须和和发布者的一模一样。这时发布者只要把这个文件的单向加密后的数据放在网页上,我们下载完数据后也使用单向加密算一次,对比两次的单向加密的结果就可以了。单向加密其本质就是提取文件的特征码,源文件保持不变。一个例子:

  openssl dgst -md5 FILE #把FILE文件进行单向加密
  md5sum FILE

单向加密的详细文档可以查看man dgst。单向加密的一些常用选项:

-md5#加密算法,加密算法还有sha1,sha224,sha256

每个算法都有对应的工具sha1sum,sha224sum,sha256sum

二对称加密

对称加密的意思是数据加密和解密使用同一个密钥,和我们平时使用的门锁类似,开门关门都使用同一把钥匙。实现的方法:

  opensslenc -e -des3 -a -salt -in FILE -out FILE.S #使用这个命令加密数据,是把FILE加密成FIEL.S,加密算法使用的是des3。命令执行后需要输入密码。
  opensslenc -d -des3 -a -salt -in FILE.S -out FILE.S #这个命令是把FILE.S文件解密为FILE。这时需要加密时输入的密码
    gpg -c FILE #会生成FILE.gpg的加密文件
   gpg -o FILE -d FILE.gpg #解密FILE.gpg文件为FILE
   对称加密的详细用法可以使用:man enc查看,对称加密的一些常用的参数
   -e #对文件进行加密
   -d #对文件进行解密
   -des3 #使用des3算法,算法还有aes,blowfish,twofish
   -a #base64的编码方式
   -salt #这项是默认的,可以不写,加密文件的时候添加一些其它数据

三非对称加密

非对称加密是这一节的重点,非对称加密使用的是一对密钥:公钥和私钥。公钥放在互联网上,允许任何人下载使用;私钥只有一个主机持有。通过公钥加密的数据只有私钥可以解开,通过私钥加密的数据只有公钥可以解开。一个例子:

使用非对称加密需要先生成私钥,然后从私钥中提取公钥。

opensslgenrsa -out FILE.PRIVE 2048 #生成一个2048为的私钥
opensslrsa -in FILE.PRIVE -pubout -out FILE.PUB #从私钥FILE.PRIVE中提取公钥FILE.PUB

以下这些内容根本不重要,我们在网上传送数据何时使用过加密算法,何时那么费劲过,加密文件最多也就是使用对称加密给文件加个密码。

       gpg--gen-key #生成密钥对
       gpg--list #查看公钥
       gpg-a -export -o FILE.pubkey #导出公钥到FILE.pubkey文件中
       gpg--import FILE.pubkey #导入公钥
       gpg-e -r NAME FILE #使用NAME公钥加密FILE文件
       gpg-d FILE #解密FILE文件,解密需要有对应文件的私钥
       gpg--delect-keys NAME #删除NAME公钥
       gpg--delect-secret-keys NAME #删除NAME私钥
       gpg的详细用法man gpg
       genrsa的详细用法man genrsa

四加密类型对比


加密速度


密钥数量


分发难度


密钥安全性


对称加密




难,方式很多,很混乱


安全机制很不健全


单向加密




最简单,官网公布


不需要安全性


非对称加密




中,通过CA分发


有健全的安全机制

加密类型对比表

传大量私密数据,我们一般采取三种加密方式联合验证的方式传输。假如a给b发送数据,数据的格式如:key(date+sa(date)+pb(key)

pb代表的是b的公钥,sa代表a的私钥,key代表对称加密的密钥。这个方法不仅保证加密的安全性,也保证了加密的速度,同时也知道这个数据时谁发送的。

五非对称加密的密钥认证

非对称加密的有一个重点,我们若想和某个主机b通信,必须要有他的公钥才可以发送私密消息,倘若一个网站直接拿出一个公钥说这是就是主机a的公钥,我们怎么证明这个公钥就是b的公钥。互联网上就建设了一些认证机构CA,一个提供服务的服务器要使用加密数据可以去CA机构认证,我们的操作系统会把这些机构认证的公钥下载并导入系统。

有时公司构建一个内部使用的网站不对外提供服务,只是公司内部使用并且需要保证数据安全,这时我们可以建立一个CA给我们公司的网站提供服务。以下我们直接构建一个CA,并模拟一个CA颁发证书的流程。CA的配置文件shi/etc/pki/tls/openssl.cnf

1第一步我们要构建一个CA

cd /etc/pki/CA #切换到构建CA的目录
(umask 066;openssl genrsa -outprivate/cakey.pem 2048) #生成CA使用的2048位的私钥
touch index.txt          #创建CA数据库
echo 01 > serial        #重置计数器,给证书编号使用,移除证书时也要使用这编号
openssl req -new -x509 -key private/cakey.pem-days 7300 -out cacert.pem #CA生成自签名证书,输入这行命令会进入交互界面,交互界面内容如下:
Country Name (2 letter code) [XX]:CN            #这一步是输入国家
State or Province Name (full name)[]:beijing        #指定省份
Locality Name (eg, city) [DefaultCity]:haidian       #指定市
Organization Name (eg, company) [DefaultCompany Ltd]:oldking.org #公司名称
Organizational Unit Name (eg, section)[]:directors            #部门名称
Common Name (eg, your name or your server‘shostname) []:oldking.org  #服务器名字
Email Address []:[email protected]       #邮箱

2生成请求授权文件

这是在其它主机执行的命令,也就是向CA申请证书文件的服务器执行的命令。

cd /etc/httpd/ssl/
(umask 066;openssl genrsa -outhttpd.key 2048)    #给当前主机创建私钥密钥
openssl req -new -key httpd.key -out httpd.csr-days 730  #生成请求文件,这个同样会进入交互式模式:
Country Name (2 letter code) [XX]:CN
State or Province Name (full name)[]:beijing
Locality Name (eg, city) [DefaultCity]:haidian 
Organization Name (eg, company) [Default CompanyLtd]:oldking.org
Organizational Unit Name (eg, section)[]:IT
Common Name (eg, your name or your server‘shostname) []:lw.org
Email Address []:
Please enter the following ‘extra‘attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:lw is good

3 CA授权

scp httpd.csr 172.16.29.1:/root  #把请求文件发送到CA上
openssl ca -in /root/httpd.csr -outcerts/httpd.crt -days 730  #这一步也要进入交互式模式,确认授权信息

4 CA吊销证书

openssl x509 -in /PATH/FROM/CERT_FILE-noout -serial -subject   #查找授权文件的信息
openssl ca -revoke /etc/pki/CA/newcerts/ SERIAL.pem            #吊销指定证书
echo 01 > /etc/pki/CA/crlnumber   #生成吊销证书的编号(第一次吊销一个证书时才需要执行)
openssl ca -gencrl -out/etc/pki/CA/crl/ca.crl     #更新证书吊销列表
openssl crl -in /etc/pki/CA/crl/ca.crl -noout-text       #查看crl文件

总结

这一节主要了解三个加密方式的简单用法,了解加密算法的优缺点。熟练CA授权证书的流程,并可以自建CA并给其他主机授权。

时间: 2024-12-17 12:03:48

安全与加密的相关文章

php7实现基于openssl的加密解密方法

还需要注意的是加密字符串长度问题,如果加密字符串长度太长需要进行分段加解密,如下代码: 加密:(公匙加密,私密一般用来解密) function encrypt($originalData){ $publicKeyFilePath = '/www/ceshi/rsa_public_key.pem'; extension_loaded('openssl') or die('php需要openssl扩展支持'); file_exists($publicKeyFilePath) or die('公钥的文

python实现网页登录时的rsa加密流程

对某些网站的登录包进行抓包时发现,客户端对用户名进行了加密,然后传给服务器进行校验. 使用chrome调试功能断点调试,发现网站用javascript对用户名做了rsa加密. 为了实现网站的自动登录,需要模拟这个加密过程. 网上搜了下关于rsa加密的最简明的解释: rsa加密是非对称加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥.公钥是可发布的供任何人使用,私钥则为自己

人工智能PK透明加密,数据安全保护谁能技高一筹

人工智能一直是全球的一大热点话题,从很久之前谷歌研发的人工智能机器人击败柯洁.李世石等众多围棋高手,到最近特斯拉CEO埃隆o马斯克投资的人工智能研究机构OpenAI研发的机器人击败了国外顶尖Dota 2玩家之一的Danil Ishutin.而重磅消息却是美国电商巨头亚马逊,已准备将人工智能技术用于商业服务中,计划将其用于云存储方面,用于保护用户数据的安全. 亚马逊的这一计划,主要是通过机器学习技术,自动识别.分类和保护用户保存在亚马逊云计算平台上的敏感数据.但引入人工智能技术之后,亚马逊的云存储

Java DES 加密和解密源码

Java密码学结构设计遵循两个原则: 1) 算法的独立性和可靠性. 2) 实现的独立性和相互作用性. 算法的独立性是通过定义密码服务类来获得.用户只需了解密码算法的概念,而不用去关心如何实现这些概念.实现的独立性和相互作用性通过密码服务提供器来实现.密码服务提供器是实现一个或多个密码服务的一个或多个程序包.软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器.安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来

使用JAVA解压加密的中文ZIP压缩包

近来项目中需要对ZIP压缩包解压,然后将解压后的内容存放到指定的目录下. 该压缩包的特性: 使用标准的zip压缩格式(压缩算法没有深入探究) 压缩包中带有目录并且目录名称是中文 压缩时加了密码 因为jre中自带的java.util.zip.*包不支持中文及加密压缩,所以选择使用zip4j包. 下面是解压的实现代码: 1 public class UnZip { 2 private final int BUFF_SIZE = 4096; 3 4 /* 5 获取ZIP文件中的文件名和目录名 6 */

关于数据传输中加密解密那点事儿(一)

随着互联网的兴起,越来越多的信息和资源要通过网络传输完成:然而在这些数据传输中总有一些"无关人员"做一些窃听.盗取.篡改等危害数据安全的行为,所以我们要对数据进行加密处理,以保证数据的安全传输: 所以有了一下几种加密方式: 一.对称加密: 这种算法简单来说就是 数据的发送方和接收方都必须要有同一种密钥(加密数据所用到的密钥),在数据的传输中 数据与密钥都通过加密的方式传送: 特性:在数据加密中,数据被分成固定大的块,逐个加密:加密和解密速度也快: 缺陷:因为加密和解密使用同一种密钥,所

如何有效的对PDF文件进行加密保护

PDF是办公中保存资料数据文件不可或缺的一类电子文件工具软件,它的优势在于清晰的位图显示形式和良好的阅读体验,所以很多合同报告.电子书.技术文档.设计图纸等都越来越倾向这种存储方式.和普通的电子文档一样,如Word.Excel,PDF文件也存在信息安全泄漏风险,因此加密保护也是必不可少的.下面就来分享下如何对PDF进行权限设置和PDF文件加密操作. PDF格式的官方编辑器Adobe acrobat 软件为我们提供的口令加密包含"打开文档的口令"和"限制文档编辑打印口令&quo

MD5加密和RSA加密

1.MD5加密  MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用. MD5的功能:     ①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹):    ②.不同的输入得到的不同的结果(唯一性):    ③.根据128位的输出结果不可能反推出输入的信息(不可逆),也就是只能加密,不能解密:  MD5的用途:     1.防止被篡改:    1)比如发送一个电子文档,发送前,我先得到MD5的

AJAX+REA实现前后台数据交互的加密解密

AJAX+REA实现前后台数据交互的加密解密 1.创建js文件Encryption.js /**  * 加密解密  */ /** RSA加密用 生成key */ function bodyRSA(){ /** 1024位的key参数写130,2014位的key参数写260 */ setMaxDigits(130); /** ajax 调用后台方法,取回公钥 */ var keyR ;     $.ajax({      url: "/GHGL/Key/pk",//请求后台的url,本例

Android使用KeyStore对数据进行加密

谈到 Android 安全性话题,Android Developers 官方网站给出了许多很好的建议和讲解,涵盖了存储数据.权限.网络.处理凭据.输入验证.处理用户数据.加密等方方面面 密钥的保护以及网络传输安全 应该是移动应用安全最关键的内容.Android 提供大量用来保护数据的加密算法,例如 Cipher 类中提供了 AES 和 RSA 算法,再例如安全随机数生成器 SecureRandom 给 KeyGenerator 提供了更加可靠的初始化参数,避免离线攻击等等. 而如果需要存储密钥以