从Java程序员的角度理解加密的那些事

前言

在我们日常的程序开发中,或多或少会遇到一些加密/解密的场景,比如在一些接口调用的过程中,我们(Client)不仅仅需要传递给接口服务(Server)必要的业务参数,还得提供Signature(数字签名)以供Server端进行校验(是否是非法请求?是否有篡改?);Server端进行处理后返回给Client的响应结果中还会包含Signature,以供校验。本篇博客将从Java程序员的角度出发,通俗理解加密、解密的那些事!

理解一些术语:单向、对称、非对称

假设场景:client需要发送一段消息"hello world"给server

单向加密

所谓单向加密是指client将消息"hello world"加密的过程不需要server参与,即加密不依赖server;同时,server将受到的消息解密成"hello world"的过程也不依赖client。 例如,咱们知道的MD5就是一种单向加密算法,是一种不可逆的算法。

对称加密

client加密消息需要依赖server,双方可以相互解密。

非对称加密

client加密消息需要依赖server,但是双方不能相互解密。

不可不知的Base64编码

先看一段代码:

BASE64编码/解码测试

需要注意的是,BASE64EncoderBASE64Decoder并不是官方JDK实现类,如果需要使用,需要引入sun.misc包。 严格来说,BASE64并不是一种加密算法,而是一种编码格式。说白了,BASE64的作用是,将人肉眼可以识别的信息,转换为不可以识别的数据,并不是对数据进行加密,只是给数据换了一身衣服而已。(骗的了你的眼睛,骗不了程序) 原数据越大,那么BASE64生成的结果就越大,这是需要额外注意的点。 BASE64的生成结果始终由64个字符来组成。 由于BASE64的编码特性,在一些场景中有应用,比如有些网站会把图片的二进制流编码成BASE64传递给客户端;比如有些邮件服务器会将邮件的附件直接编码成BASE64连同邮件内容一起发送;比如在URL中有中文需要传递,可以先将中文进行BASE64编码,来避免传输过程中的乱码。

使用广泛的MD5

MD5,即Message Digest,信息摘要算法第5版。比如在和微信支付、支付宝支付接口交互的过程中,你就可以选择MD5算法来加密。

先来看一段代码:

MD5

MD5破解? 如前文所说,MD5是一种不可逆的算法,但是为什么存在破解呢?其实,所谓的破解,并不是真正的破解,只不过是大数据查询的一个碰撞而已。比如,有一台服务器存储了大量key以及key的MD5编码的信息,那么就可以拿着数据去进行比对。 那么实际场景中,一般我们如何防止这种暴力破解呢? 答案:进行二次加密。 比如client在调用server接口的时候,server分配给client一个Token,每次client调用server接口的时候,需要对Token以及业务参数一起进行MD5加密。其实这就是所谓的一个“加盐”的过程。

MD5的一些特性分析

第一,我们知道BASE64随着原数据的增大而导致编码后的结果长度变大,而MD5结果的长度值是固定的,就是32位。也就是MD5的压缩性很好。 第二,从原数据计算出MD5是一个快速且容易的过程,不可逆。 第三,要找到2个不同的数据,它们计算后的MD5一致,这是非常困难的。这是MD5的弱碰撞性,也即是说想要伪造数据太困难了。 第四,对原数据的任何修改,哪怕只改动一个字节数据,也会导致MD5值发生很大变化,说明MD5的抗修改性非常好,非常适合密码、业务数据校验、文件比对等。

了解SHA

SHA,即Security Hash Algorithm,安全散列算法,比如,我们的程序开发完毕,我们发布的时候,想指定的人才可以使用,该怎么办呢?这个时候就可以考虑使用SHA算法。SHA是公认的比MD5更加安全的加密算法,在数字签名领域应用广泛。

好了,到这里,初步介绍了下和咱们JAVA程序员有关的一些加密的知识,重点介绍了BASE64和MD5,加密算法的水太深了,欢迎大家拍砖指教,^_^

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏农夫安全

用了13年的wpa2协议出漏洞,新型KRACH攻击手法.

介绍 研究人员发现WPA2的严重弱点,WPA2是保护所有现代受保护的Wi-Fi网络的协议。内的受害者的范围内的攻击者可以利用使用这些弱点.具体来说,攻击者可以使...

3545
来自专栏即时通讯技术

用JWT技术解决IM系统Socket长连接的身份认证痛点

随着瓜子二手车相关业务的发展,公司有多个业务线都接入了IM系统,IM系统中的Socket长连接的安全问题变得越来越重要。本次分享正是基于此次解决Socket长连...

1172
来自专栏女程序员的日常

SSD的传输总线、传输协议、传输接口

前言:关于SSD,有众多总线类型、协议类型、接口类型,每个接口还包括不同型号,在这里花点时间全部整理一下,整理日期2017-08-08。 1.传输总线 总线就像...

2601
来自专栏安全领域

在微控制器和物联网上使用JavaScript:SSL / TLS

在今天的这篇文章中,我们回到Particle Photon上来解决他的一个最大的缺点:缺少TLS支持,接下来我们将详细介绍如何添加这一功能。

79214
来自专栏FreeBuf

漏洞科普:你对弱口令重视吗?

在当今很多地方以用户名和口令作为鉴权的世界,口令的重要性就可想而知了。口令就相当于进入家门的钥匙,当他人有一把可以进入你家的钥匙,想想你的安全、你的财物、你的隐...

2035
来自专栏程序员宝库

聊聊 HTTPS 和 SSL/TLS 协议

要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识。 大致了解几个基本术语(HTTPS、SSL、TLS)的含义 大致了解 HTTP 和 TCP 的...

37711
来自专栏安智客

TLS与SSL的介绍及区别

最近,Google要求Android下一个版本Android P 的应用程序,将默认使用加密连接,这意味着运行 Android P 系统的安卓设备无论是接收或者...

1616
来自专栏耕耘实录

存储基础:ATA、SATA、SCSI、SAS、FC

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

2585
来自专栏FreeBuf

使用Go和Let's Encrypt证书部署HTTPS

为什么要使用HTTPS?使用HTTPS的途径有哪些?如何用Go来部署HTTPS?拿出你的小本本,你要的干货都在这儿! HTTPS 的好处我们已在之前的文章中提高...

2493
来自专栏大魏分享(微信公众号:david-share)

用户身份验证的几种方式以及OpenStack认证方式的使用

笔者在加入VMware之前,做UNIX技术支持工作将近8年。由于UNIX服务器通常在数据中心内部,与外网隔离,因此用户身份认证通过比较简单。即密码验证。后来接触...

4385

扫码关注云+社区

领取腾讯云代金券