加密 编码简单分析

MD5,SHA1,RSA,DSA,AES,BASE64,ENCODED,URL,Unicode,UTD-8,GBK等等这些东西,其实很多人扎眼一看会感觉非常头疼,感觉非常难,很高大上,今天说的就是这些东西到底是什么,看完之后应该觉得会有一种很明朗的感觉了。

 

先说加密这块,加密跟密码学是息息相关的,加密主要是在战争时期发展起来的,古时候的外国的密码棒,中国虎符等等都属于一种加密形式。已经包含了最基本的加密元素 加密算法密钥。举个例子,如果我们写了一种加密方法加密26个字母,a对应B,B对应C依次力推,最后一个字母对应A。这样基本简单加密完成了,我发送一断英文给对方,对方拿到后对每个字母后退一格,获取原始字母,这样就能拿到了。这个简单的加密就包含了两个关键元素。加密算法就是字母+1,密钥就是对应的加密过后的字母表。这是传统的加密,我们现在用的加密算法一般都是跟计算机相关的。可以对二进制进行加密,并且非常难以破解。这里说下破解,没有一个加密算法是不能破解的,只是区别于破解的难度,当破解的计算纬度非常非常大的时候可以等同于无法破解了。现在的加密算法基本上都是 :

 

原数据(加密算法+密钥)  生成 密文  对方   原数据(解密算法+密钥)

 

这里密钥双方可能一致,可能不一致 ,这个就是区分是非对称加密 和对称加密 。对应的最经典的算法是RSA AES(DES密钥太短了,很容易破解被弃用了)。看到这里应该对加密解密有了一个很直白的了解了。

 

思考一个问题,互联网的环境是很复杂的,服务器和服务器或者客户端和服务器之间进行加密通信的情况下,如果保证双方的密钥一样,很容易造成密文和密钥的泄露,这样的话隐私就等于全部公开了,如果之间有什么小九九的信息,基本就GG了。这种方式肯定是不安全的,怎么样才能更加安全保证我们的信息呢?我们上面说到加密解密过程中的密钥可以是不一样的,这种就引出了非对称加密。

 

非对称加密安全程度比对称加密高很多,但是同等的效率比对称加密要第一点。不过这在保证安全的情况下其实都可以忽略了。对称加密的算法很复杂,破解难道非常大。在双方的通信过程中,各自都应该持有对方的一个密钥,进行加密,收到后用自身保留的密钥进行解密。这个工程确保了密文的安全性。双方各自持有自身的密钥统称私钥,公开出去给对方的密钥叫公钥。私钥可以解公钥,公钥同样能解私钥,但是记住一点。公开出去的一定是公钥,不能是私钥,因为在比特币等算法中,公钥是通过私钥经过椭圆曲线算法算出来的,如果私钥公开很大可能,公钥人家也知道了。在RSA的算法中,公钥基本都是一样的这个哈哈,RSA算是对称加密最简单的算法了。

 

理解什么是非对称加密我们再来看实际使用中服务器对服务器或者客户端对服务器之间的加密数据传输

 

              服务器A                                                                                          服务器B

服务器A原文 (非对称算法+服务器B的公钥加密) 发送给服务器B  服务器B得到原文(服务器B的私钥解密)

 

服务器B得原文 (非对称算法+服务器A的私钥解密) 发送给服务器A  服务器B得到原文(服务器A的公钥加密)

 

基本上就是上面的这个步骤,最简单的流程实现。但是但是。看到上面的这个流程大家有没有觉得哪里不对或者有点问题?如果我是想捣乱的一方打乱你们之间的通信,我拦截到A给B发送的密文信息或者B给A发送的密文信息,然后通过送达方的公钥加密我想发送的比如说低俗的语句,那么对方收到的不就是拦截方发送的了吗?虽然我不知道原文是什么,但是我能给你捣乱,让你不知道对方到底给你发送的是什么消息,这样一样能达到一些目地。从这里就要需要验证发送方的身份信息了。怎么样验证呢?接下来引出签名的概念

 

什么是签名?签名的大体意思就是私钥加密一断信息发送给地方,然后用自己的公钥界面出原文。这个私钥加密的内容就是签名。私钥是非公开的,只要本身持有,通过私钥可以确保对方就是对方,你就是你。所以在我们实际使用中,非对称加密的传输为了确保安全肯定会携带上签名信息的整体逻辑应该修改成下面的样子

 

服务器A 原文 通过服务器B的公钥加密生成密文+服务器A对加密的数据HASH后用A的私钥加密生成签名一起打包发送给服务器B  服务器B拿到信息后私钥解密加密信息用HASH得到HASH后,比对签名,对比如果一样说明这个消息是可靠安全的

 

基本的加密逻辑就是这样。懂了这个原理再下篇文章中会说到HTTPS的原理,再看HTTPS就容易理解了,这个是后话了。常用的加密逻辑基本就是这样。

 

接下来我们说下 同加密感觉很像的编码 其实这两个是完全不一样的东西

最常用的编码大家都应用知道  Base64编码 把任何的二进制流转换成文本信息传输。

使用场景是什么呢?比如说客户端传图片给后台,后台需要你这边把图片流转换成base64编码POST给他。这个是很多服务器的做法。再比如一些信息,需要转换成字符串传送,这个可以放在URL里面方便传输。还有一个直观的好处base64编码后明眼人是看不出来是什么的。达到一个心理上的加密的意思,但是这个根本不是加密,拿到编码直接转就能得到原数据了,很多人概念不清晰就说base64加密一下,这个说法其实是不对的。

base64的缺点:会把原数据变大,基本会变大1/3,导致带宽增大,读取资源的损耗增大,所以对速度要求很高,不要用这个编码

base64变种 base58去掉了一些比较容易相互混淆的字母。比如0和O,用在比特币相关的地方

 

其余的常用的编码有urlencoding在网页链接使用中把中文和特殊符号进行转码,让浏览器识别 。压缩 JPEG  MP3等等。

 

关注点还是关注加密解密更实用。

 

 

 

 

结语:感谢hencoder 感谢扔物线凯哥

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值