Java中常用的加密算法

进入公司有将近2年了,对于各种外部API接口的调试开发也有了些经验.经常会碰到签名和加密的问题.这里结合别人的博客将将加密算法简单的介绍下.
原文链接

签名
签名的意义在于对这段数据进行认证,防止数据在网络传输过程中被修改出现问题.一般来讲安全性比较高的如支付场景数据 都是经过加密传输到后台的.比如项目中涉及到微信小程序支付的情况,请求参数一般是先生成签名,然后再加密数据.传到微信后台.如果不对数据进行签名,这样在传输到微信后台的时候,中间数据被人拦截率,然后将加密数据改了一个字符.这样如果被微信成功解析,里面的数据发生了修改,这个问题是非常大的.所以就需要签名.一般来讲可以签名的加密算法有以下几种.MD5.SHA1.SHA1-256.RSA等

  • MD5及SHA加密的实现方式
    1.使用java.security.MessageDigest生成加密工具类实例,设置加密算法
    2.然后将加密字符串生成byte字节数组,调用digest方法对数据加密,返回加密字节数组.
    3.字节数组转换为字符串,再转换为16进制的字符串(不转换的话就是一堆乱码)
  • 代码示例
package encrypt;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class computeSHA1 {
	
	public static void main(String[] args) throws UnsupportedEncodingException {
		try {
			String encryptStr = "123";
			MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
			byte[] encryptResult = messageDigest.digest(encryptStr.getBytes("utf-8"));
			String   result=new String(encryptResult,"utf-8");
			System.out.println("为转换为16进制字符的SHA加密结果:"+result);
			
			StringBuffer hexString = new StringBuffer();
			for (int i = 0; i < encryptResult.length; i++) {
				if ((0xff & encryptResult[i]) < 0x10) {
					hexString.append("0" + Integer.toHexString((0xFF & encryptResult[i])));
				} else {
					hexString.append(Integer.toHexString(0xFF & encryptResult[i]));
				}
			}
			System.out.println("转换为16进制的字符串:"+hexString);
			System.out.println(hexString.toString().length());
		} catch (NoSuchAlgorithmException ex) {
			ex.printStackTrace();
		}
	}
}

非对称加密算法

  • RSA加密算法
    RSA加密算法是一个同时可以用来进行签名和加密的算法.属于非对称加密方式,也就是私钥加密,公钥解密.公钥加密,私钥解密. 目前主流的公钥加密算法就是这个.

对称加密算法

  • AES /DES/3DES属于是对称加密算法.
  • 其中DES算法安全性较低.属于是块加密算法.DES中将以64位为分组对数据进行加密.算法公开.秘钥长度56.实际上就是存在2^56种可能。
  • 3DES是在DES的基础上对一块数据用3个不同秘钥进行3次加密。安全性更高.
  • AES高级加密算法,是对称分组密码体制。

总的来讲:写这篇文章的目的一方面是 平时开发过程中在对接外部接口的过程中确实遇到了很多加密算法,但是没有一个整体梳洗的过程.同时刚好之前的面试也遇到对称加密与非对称加密算法的题目.刚好这里只是大概的总结下,具体的算法实现过程就不深入研究了,主要了解加密算法有哪些,区别以及作用知道就好了.

你可能感兴趣的:(Java)