Java安全之安全加密算法

Java安全之安全加密算法 0x00 前言

本篇文来谈谈关于常见的一些加密算法,其实在此之前,对算法的了解并不是太多。了解的层次只是基于加密算法的一些应用上。也来浅谈一下加密算法在安全领域中的作用。写本篇文也是基于算法的应用和实现,也是我的基本原则,能用就行。

0x01 算法体制

在加密算法里面大致分为四大类:对称加密算法、非对称加密算法、散列函数、组合加密。

对称加密:指的是加密的密钥和解密的密钥相同。

非对称加密:指的是加密的密钥和加密的密钥不同。分为公钥和私钥。

散列函数:主要用于验证数据的完整性,长度不受限制,hash值容易计算,散列运算过程不可逆如:MD5、SHA

0x02 散列算法

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

MD5

md5的运用范围也比较广,比如在一些数据库存储密码的时候会去使用到该算法去进行加密存储。当然也可以看到网上的一些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结果 } }

Java安全之安全加密算法

SHA

安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512

下面是一张对照图。

Java安全之安全加密算法

代码实例: 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)); } }

Java安全之安全加密算法

0x03 对称加密算法

对称加密算法,他的加解密密钥都是一样的。而对称加密的算法又分两大类,一种是每次对明文中的字节使用密钥进行加密,而第二种是对一组明文使用密钥进行加密。

Java安全之安全加密算法

先来看看分组加密的工作模式。

分组加密的工作模式 1. ECB:电子密码本(最常用的,每次加密均产生独立的密文分组,并且对其他的密文分组不会产生影响,也就是相同的明文加密后产生相同的密文) 2. CBC:密文链接(常用的,明文加密前需要先和前面的密文进行异或运算,也就是相同的明文加密后产生不同的密文) 除了这两种常用的工作模式,还有: 3. CFB:密文反馈 4. OFB:输出反馈 5. CTR:计数器 分组密码填充方式 1. NoPadding:无填充 2. PKCS5Padding: 3. ISO10126Padding

常用的加密方式DES、3DES、AES。可以来对比一下,这几个算法的区别。

Java安全之安全加密算法

BASE64

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyypdj.html