美文网首页
java对称加密算法实现

java对称加密算法实现

作者: Geroge1226 | 来源:发表于2021-07-02 16:53 被阅读0次

1、介绍

对称加密算法:单密钥同时作用与加密和解密的加密算法称为对称算法。
特点:加密秘钥= 解密秘钥
对称加密示意图如下:

image.png
  • 常见的对称算法
    DES 、3DES、 AES、PBE、 IDEA

2、各种对称算法说明

2.1、DES( Data Encryption Standard ) 数据加密标准。

DES密钥长度固定8位,
java实现代码:

import com.service.common.Constants;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.math.BigInteger;
import java.security.Key;
import java.security.SecureRandom;

public class DESUtils {
    private final static String DES = "DES";

    public static void main(String args[]) throws Exception {
        String aa ="123";
        String str1 = encrypt("owRHXv-1oOfvuduvCuGReu3WPNz4", Constants.SALT);
        System.out.println(str1);
        String str2 = decrypt(str1, Constants.SALT);
        System.out.println(str2);
    }

    // 加密
    public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        Cipher cipher = Cipher.getInstance(DES);
        DESKeySpec ds = new DESKeySpec(key);
        SecureRandom sr = new SecureRandom();
        SecretKeyFactory skfactory = SecretKeyFactory.getInstance(DES);
        SecretKey skey = skfactory.generateSecret(ds);
        cipher.init(Cipher.ENCRYPT_MODE, skey, sr);
        byte[] b = cipher.doFinal(data);
        return b;
    }
    // 加密
    public static String encrypt(String data, String key) throws Exception {
        return byte2hex(encrypt(data.getBytes(), key.getBytes()));
    }
    // 解密
    public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        Cipher cipher = Cipher.getInstance(DES);
        DESKeySpec ds = new DESKeySpec(key);
        SecureRandom sr = new SecureRandom();
        SecretKeyFactory skfactory = SecretKeyFactory.getInstance(DES);
        SecretKey skey = skfactory.generateSecret(ds);
        cipher.init(Cipher.DECRYPT_MODE, skey, sr);
        return cipher.doFinal(data);
    }
    // 解密
    public static String decrypt(String data, String key) throws Exception {
        return new String(decrypt(hex2byte(data.getBytes()), key.getBytes()));
    }
    private static String byte2hex(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp;
        for (int n = 0; b != null && n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if(stmp.length() == 1){
                hs.append('0');
            }
            hs.append(stmp);
        }
        return hs.toString().toUpperCase();
    }

    private static byte[] hex2byte(byte[] b) {
        if((b.length % 2) != 0){
            throw new IllegalArgumentException();
        }
        byte[] b2 = new byte[b.length / 2];
        for (int n = 0; n < b.length; n += 2) {
            String item = new String(b, n, 2);
            b2[n / 2] = (byte) Integer.parseInt(item, 16);
        }
        return b2;
    }

【解析】

java实现加密过程:
a、初始DES密钥器:
DESKeySpec dks = new DESKeySpec(key);
b、实例化密钥工厂:
SecretKeyFactory keyFactory=SecretKeyFactory.getInstance(KEY_ALGORITHM);
c、通过工厂生产密钥
SecretKey secretKey = keyFactory.generateSecret(dks);
d、实例化密码器,并初始化
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
// 初始化,设置为加密模式
cipher.init(Cipher.ENCRYPT_MODE, k);
e、加密返回加密后的byte[]
byte[] b = cipher.doFinal(data);

解密和加密流程一致,区别在于cipher.init(密码器初始化)选择的加密模式不同:
加密--Cipher.ENCRYPT_MODE;解密-- Cipher.DECRYPT_MODE

2.2 、3DES(三重DES算法)
2.3 、AES (Advanced Encryption Standard)高级加密标准。

微信小程序加密传输就是用这个加密算法

2.4 、IDEA(International Data Algorithm) 国际数据加密标准。
2.5、PBE(Password Based Encryption) 基于口令加密。

3、算法中的问题

  • Exception in thread "main" java.security.InvalidKeyException: Wrong key size
    DES加密,密钥必须是8个字节的。
    AES加密,密钥必须是16个字节的.
    即: key=“12345678”可以,key="123456"就会报错。

相关文章

  • Java实现常用的三种加密算法详解

    Java实现常用的三种加密算法详解 信息摘要算法、对称加密算法以及非对称加密算法。本文将利用Java实现这几种常见...

  • Java中的加密算法(二)

    1.对称加密算法1.1对称加密算法-DES 在Java中的加密算法(一)中主要讲解了密码中常用的术语,Java安全...

  • java对称加密算法实现

    1、介绍 对称加密算法:单密钥同时作用与加密和解密的加密算法称为对称算法。特点:加密秘钥= 解密秘钥对称加密示意图...

  • JAVA加密系列(三)- 非对称加密算法 RSA、DSA

    JAVA加密系列(三)- 非对称加密算法 RSA、DSA 非对称加密算法需要两个密钥:公开密钥(publickey...

  • Des

    常用加密算法的Java实现总结 对称加密算法DES、3DES和AES 算法原理DES算法把64位的明文输入块变为6...

  • Java 常用加密算法(二)---对称加密(DES/3DES(T

    Java 常用加密算法(二)---对称加密(DES/3DES(TripleDES)/AES) 基于“对称密钥”的加...

  • 加密算法简介

    常见的加密算法可以分为三大类,对称加密算法,非对称加密算法和 Hash 算法。不同算法的实现机制不同,可参考对应算...

  • encyption&decyption

    0, 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA 常用加密算法的Java实现总结(二) ...

  • AES对称加解密

    AES算法流程: Java端实现 以太坊Whisper协议中,默认的对称加密使用的是AES-GCM加密算法。这里采...

  • 加密算法的应用

    加密算法的应用 [TOC] 加密算法 加密算法主要分为对称加密和非对称加密。 对称加密 对称加密采用了对称密码编码...

网友评论

      本文标题:java对称加密算法实现

      本文链接:https://www.haomeiwen.com/subject/bfbsfltx.html