欢迎访问宙启技术站
智能推送

如何用Java函数快速实现加密和解密功能?

发布时间:2023-06-11 20:52:34

在Java中,我们可以使用多种加密算法来快速实现加密和解密功能。本文将介绍JAVA自带的几种加密算法,它们是MessageDigest、Base64和Cipher。

1.MessageDigest加密

我们可以使用Java自带的MessageDigest类来进行消息摘要,不仅可以实现数据加密保障,还能保证不篡改。常见的摘要算法有MD2、MD5、SHA1、SHA256、SHA512等。下面我们以SHA256算法为例,演示在Java中如何使用摘要计算加密字符串和校验加密结果的方法:

import java.security.MessageDigest;

public class SHA256Util {

    /**

     * 利用java原生的类实现SHA256加密

     * @param str 加密前的字符串

     * @return 加密后的字符串

     */

    public static String getSHA256StrJava(String str){

        MessageDigest messageDigest;

        String encodestr = "";

        try {

            messageDigest = MessageDigest.getInstance("SHA-256");

            messageDigest.update(str.getBytes("UTF-8"));

            encodestr = byte2Hex(messageDigest.digest());

        } catch (Exception e) {

            e.printStackTrace();

        }

        return encodestr;

    }

    /**

     * 将byte转为16进制

     * @param bytes

     * @return

     */

    private static String byte2Hex(byte[] bytes){

        StringBuffer stringBuffer = new StringBuffer();

        String temp = null;

        for (int i=0; i<bytes.length; i++){

            temp = Integer.toHexString(bytes[i] & 0xFF);

            if (temp.length()==1){

                //1得到一位的进行补0操作

                stringBuffer.append("0");

            }

            stringBuffer.append(temp);

        }

        return stringBuffer.toString();

    }

    public static void main(String[] args) {

        String str = "test";

        System.out.println(getSHA256StrJava(str));

    }

}

2.Base64加密

Base64是一种编码方法,它可以将二进制数据编码为可打印的ASCII字符。在实际应用中,我们通常使用Base64对二进制数据进行编码和解码,从而方便网络传输和存储。下面我们来演示如何在Java中使用Base64进行加密和解密:

import java.util.Base64;

public class Base64Util {

    /**

     * Base64加密

     * @param str

     * @return

     * @throws Exception

     */

    public static String encode(String str) throws Exception {

        byte[] bytes = str.getBytes("UTF-8");

        return Base64.getEncoder().encodeToString(bytes);

    }

    /**

     * Base64解密

     * @param str

     * @return

     * @throws Exception

     */

    public static String decode(String str) throws Exception {

        byte[] bytes = Base64.getDecoder().decode(str);

        return new String(bytes, "UTF-8");

    }

    public static void main(String[] args) throws Exception {

        String str = "test";

        String encodeStr = encode(str);

        System.out.println(encodeStr);

        System.out.println(decode(encodeStr));

    }

}

3.Cipher加密

Cipher是Java中用于加密和解密的类,它支持多种加密算法,比如DES、AES、RSA等。它需要一个秘钥来控制加密和解密的过程,因此在使用Cipher时,我们需要先生成一个秘钥。下面我们来演示如何在Java中使用DES算法实现加密和解密:

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

public class CipherUtil {

    private static final String KEY_ALGORITHM = "DES";

    private static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5Padding";

    /**

     * 生成秘钥

     * @return

     * @throws Exception

     */

    public static byte[] initKey() throws Exception {

        KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);

        kg.init(56);

        SecretKey secretKey = kg.generateKey();

        return secretKey.getEncoded();

    }

    /**

     * DES加密

     * @param data  待加密数据

     * @param key   加密秘钥

     * @return

     * @throws Exception

     */

    public static byte[] encrypt(byte[] data, byte[] key) throws Exception {

        SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);

        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);

        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        return cipher.doFinal(data);

    }

    /**

     * DES解密

     * @param data  待解密数据

     * @param key   解密秘钥

     * @return

     * @throws Exception

     */

    public static byte[] decrypt(byte[] data, byte[] key) throws Exception {

        SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);

        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);

        cipher.init(Cipher.DECRYPT_MODE, secretKey);

        return cipher.doFinal(data);

    }

    public static void main(String[] args) throws Exception {

        byte[] key = initKey();

        String str = "test";

        byte[] encrypt = encrypt(str.getBytes(), key);

        byte[] decrypt = decrypt(encrypt, key);

        System.out.println(new String(decrypt));

    }

}

总结

本文介绍了JAVA自带的三种加密算法,它们是MessageDigest、Base64和Cipher。在实际应用中,我们可以根据具体业务需求选择合适的算法来实现加密和解密功能。这些算法能够保障数据的安全性,在计算机网络和信息安全领域发挥着重要作用。