深入理解加密解密

一、概述

在开发项目中我们必然会涉及到加密解密,我们常需要用到加解密算法,加解密算法主要分为三大类:

1、对称加密算法,如:AESDES3DES

2、非对称加密算法,如:RSADSAECC

3、散列算法,如:MD5SHA1HMAC

接下来对它们各自的算法和在项目中的应用进行具体分析。

二、各算法对比

对称加密算法(加解密密钥相同)

非对称算法(加密密钥和解密密钥不同)

散列算法比较

对称与非对称算法比较

注:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数

三、项目中常用总结

对称加密: DES(56位),

非对称加密: ECC(160位)或RSA(1024),

消息摘要: MD5

数字签名:DSA

其中,AES和MD5最为常用,

四、应用案例

4.1、DES应用之用户ID加解密

背景介绍

有时候我们不希望直接把ID暴露给用户,因为有规则的ID,容易泄露信息,同时有可能被第三方直接遍历抓取资源。为了防止数据库条目 ID 直接暴露给用户,需要对ID进行按照自己的规则加密

加解密核心代码

加密:

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

SecretKey securekey = keyFactory.generateSecret(dks);

cipher = Cipher.getInstance(desMode);

cipher.init(Cipher.ENCRYPT_MODE, securekey, spec);

解密:

dks =new DESKeySpec(key);

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

SecretKey securekey = keyFactory.generateSecret(dks);

cipher = Cipher.getInstance(desMode);

cipher.init(Cipher.DECRYPT_MODE, securekey, spec);

4.2、RSA之密码明文传输

背景介绍:

当用户设置或者更改密码时,通过输入的密码在页面的表单数据中显示为明文,这样可能会窃取,产生安全风险。因此需要采用一定的规则对其进行密文显示。

RSA和核心代码

前端:引入jsencrypt.jsp进行加密运算。

后端:通过RSAUtils里面的解密方法进行解密。

4.3、MD5之签名加密

背景介绍

系统从外部获取数据时,通常采用API接口调用的方式来实现。请求方和接口提供方之间的通信过程,有这几个问题需要考虑:

1)、请求参数是否被篡改;

2)、请求来源是否合法;

3)、请求是否具有唯一性。

为了保证请求来源的合法性,需要求调用方按照约定好的算法生成签名字符串,作为请求的一部分,接口提供方验算签名即可知是否合法。

MD5签名加密核心代码

public static String getEncryptionUtf8(String originString)

throws UnsupportedEncodingException {

String result ="";

if (originString !=null) {

try {

// 指定加密的方式为MD5

 MessageDigest md = MessageDigest.getInstance("MD5");

md.update((originString).getBytes("UTF-8"));

byte b[] = md.digest();

// 进行加密运算

            int i;

StringBuffer buf =new StringBuffer("");

for(int offset=0; offset

i = b[offset];

if(i<0){

i+=256;

}

if(i<16){

buf.append("0");

}

buf.append(Integer.toHexString(i));

}

result = buf.toString();

}catch (NoSuchAlgorithmException e) {

//e.printStackTrace();

        }

}

return result;

}

你可能感兴趣的:(深入理解加密解密)