Java安全之安全加密算法
作者 | nice_0e3
来源 | urlify.cn/UZRjqe
前言
本篇文来谈谈关于常见的一些加密算法 , 其实在此之前 , 对算法的了解并不是太多 。 了解的层次只是基于加密算法的一些应用上 。 也来浅谈一下加密算法在安全领域中的作用 。 写本篇文也是基于算法的应用和实现 , 也是我的基本原则 , 能用就行 。
1 、算法体制在加密算法里面大致分为四大类:对称加密算法、非对称加密算法、散列函数、组合加密 。
对称加密:指的是加密的密钥和解密的密钥相同 。
非对称加密:指的是加密的密钥和加密的密钥不同 。 分为公钥和私钥 。
散列函数:主要用于验证数据的完整性 , 长度不受限制 , hash值容易计算 , 散列运算过程不可逆如:MD5、SHA
2 、散列算法Hash , 一般翻译做散列、杂凑 , 或音译为哈希 , 是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出 , 该输出就是散列值 。 这种转换是一种压缩映射 , 也就是 , 散列值的空间通常远小于输入的空间 , 不同的输入可能会散列成相同的输出 , 所以不可能从散列值来确定唯一的输入值 。 简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数 。
MD5md5的运用范围也比较广 , 比如在一些数据库存储密码的时候会去使用到该算法去进行加密存储 。 当然也可以看到网上的一些md5破解的 。 但是他们都是基于彩虹表去跑 , 使用字典进行md5加密 , 然后把加密的值进行对比 , 从而判断该md5值的明文 。
代码实例:package com.demo;import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5demo {private static String name = "xiaoming";public static void main(String[] args) throws NoSuchAlgorithmException {MessageDigest md5 = MessageDigest.getInstance("MD5");//设置要返回的摘要算法对象byte[] digest = md5.digest(name.getBytes()); //计算hash值System.out.println(HexBin.encode(digest));//输出hash结果}}
文章插图
SHA安全散列算法(英语:Secure Hash Algorithm , 缩写为SHA)是一个密码散列函数家族 , 是FIPS所认证的安全散列算法 。 能计算出一个数字消息所对应到的 , 长度固定的字符串(又称消息摘要)的算法 。 且若输入的消息不同 , 它们对应到不同字符串的机率很高 。
SHA家族的五个算法 , 分别是SHA-1、SHA-224、SHA-256、SHA-384 , 和SHA-512
下面是一张对照图 。
文章插图
代码实例:package com.demo;import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class jdksha1 {private static String name = "xiaoming";public static void main(String[] args) throws NoSuchAlgorithmException {MessageDigest sha = MessageDigest.getInstance("SHA");byte[] digest = sha.digest(name.getBytes());System.out.println(HexBin.encode(digest));}}
文章插图
3 、对称加密算法对称加密算法 , 他的加解密密钥都是一样的 。 而对称加密的算法又分两大类 , 一种是每次对明文中的字节使用密钥进行加密 , 而第二种是对一组明文使用密钥进行加密 。
文章插图
先来看看分组加密的工作模式 。
分组加密的工作模式1. ECB:电子密码本(最常用的 , 每次加密均产生独立的密文分组 , 并且对其他的密文分组不会产生影响 , 也就是相同的明文加密后产生相同的密文)2. CBC:密文链接(常用的 , 明文加密前需要先和前面的密文进行异或运算 , 也就是相同的明文加密后产生不同的密文)除了这两种常用的工作模式 , 还有:3. CFB:密文反馈4. OFB:输出反馈5. CTR:计数器分组密码填充方式1. NoPadding:无填充2. PKCS5Padding:3. ISO10126Padding常用的加密方式DES、3DES、AES 。 可以来对比一下 , 这几个算法的区别 。
文章插图
BASE64【Java安全之安全加密算法】因为BASE64的加密解密算法是公开的 , 所以加密数据是没有任何安全性可言 。 先来看看API文档中提供的BASE64加密的类 。 除了在JDK中内置的也有一些第三方类会提供BASE64加密的类 。
- 纠结|硬杠红米Note9Pro?iQOO Z1跌至1575,对比之后纠结了!
- 王兴称美团优选目前重点是建设核心能力;苏宁旗下云网万店融资60亿元;阿里小米拟增资居然之家|8点1氪 | 美团
- 长安|长安傍上华为这个大腿,市值暴涨500亿!可见华为影响力之大?
- 巅峰|realme巅峰之作:120Hz+陶瓷机身+5000mAh 做到了颜值与性能并存
- 蛋壳公寓|官媒发声:绝不能让“割韭菜者”一跑了之!
- 现状|程序员现状揭秘:平均年薪20.36万,Java人才需求量最大
- 看过明年的iPhone之后,现在下手的都哭了
- 直播销售员|石家庄桥西区插上“互联网+”智慧发展之翼
- 精英|业务流程图怎么绘制?销售精英的经验之谈
- V2X|V2X:确保未来道路交通数据交换的安全性
