21xrx.com
2025-06-18 12:15:43 Wednesday
登录
文章检索 我的文章 写文章
在我们日常编程中
2023-06-11 10:02:50 深夜i     14     0

在我们日常编程中,数据加密是非常重要的。在Java中,加密算法有很多种。本文将介绍Java中常用的加密算法以及实现步骤。

一、常用加密算法介绍

1、MD5加密算法

MD5加密算法是一种不可逆的加密算法,即无法通过加密后的结果推算出原始数据。其特点是加密后的字符串长度固定为32个字符,常用于密码加密和校验文件完整性等操作。Java中实现MD5加密算法需要使用Java自带的java.security.MessageDigest类。

下面是一个示例代码:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
  public static String encrypt(String dataStr) throws NoSuchAlgorithmException {
    MessageDigest md5 = MessageDigest.getInstance("MD5");
    byte[] data = dataStr.getBytes();
    md5.update(data);
    byte[] resultBytes = md5.digest();
    StringBuilder sb = new StringBuilder();
    for (byte b : resultBytes) {
      String hex = Integer.toHexString(b & 0xff);
      sb.append(hex.length() == 1 ? "0" + hex : hex);
    }
    return sb.toString();
  }
  public static void main(String[] args) throws NoSuchAlgorithmException {
    String dataStr = "Hello, world!";
    String result = encrypt(dataStr);
    System.out.println(result);
  }
}

2、DES加密算法

DES加密算法是一种对称加密算法,其加密和解密使用相同的密码。DES加密算法的特点是加密速度快,不过由于密钥长度过短,已被许多攻击者成功破解。Java中实现DES加密算法需要使用Java自带的javax.crypto包。

以下是一个示例代码:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.SecureRandom;
import java.util.Base64;
public class DESUtil {
  private static final String KEY = "12345678"; // 密钥
  public static String encrypt(String dataStr) throws Exception {
    SecureRandom random = new SecureRandom(); // 加密随机数生成器
    DESKeySpec desKeySpec = new DESKeySpec(KEY.getBytes()); // Key转换
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); // Key工厂
    SecretKey secretKey = keyFactory.generateSecret(desKeySpec); // 生成Key
    Cipher cipher = Cipher.getInstance("DES"); // Cipher初始化
    cipher.init(Cipher.ENCRYPT_MODE, secretKey, random);
    byte[] encryptedData = cipher.doFinal(dataStr.getBytes()); // 加密
    return Base64.getEncoder().encodeToString(encryptedData); // Base64编码返回
  }
  public static String decrypt(String dataStr) throws Exception {
    byte[] encryptedData = Base64.getDecoder().decode(dataStr); // Base64解码
    SecureRandom random = new SecureRandom(); // 解密随机数生成器
    DESKeySpec desKeySpec = new DESKeySpec(KEY.getBytes()); // Key转换
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); // Key工厂
    SecretKey secretKey = keyFactory.generateSecret(desKeySpec); // 生成Key
    Cipher cipher = Cipher.getInstance("DES"); // Cipher初始化
    cipher.init(Cipher.DECRYPT_MODE, secretKey, random);
    byte[] decryptedData = cipher.doFinal(encryptedData); // 解密
    return new String(decryptedData);
  }
  public static void main(String[] args) throws Exception {
    String dataStr = "Hello, world!";
    String encryptedDataStr = encrypt(dataStr);
    String decryptedDataStr = decrypt(encryptedDataStr);
    System.out.println("原始数据:" + dataStr);
    System.out.println("加密后的数据:" + encryptedDataStr);
    System.out.println("解密后的数据:" + decryptedDataStr);
  }
}

3、RSA加密算法

RSA加密算法是一种非对称加密算法,其加密和解密使用不同的私钥和公钥。RSA加密算法的特点是加密速度较慢,但是安全性很高,被广泛应用于网络安全领域。Java中实现RSA加密算法需要使用Java自带的java.security包和org.bouncycastle包。

以下是一个示例代码:

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
public class RSAUtil {
  public static String KEY_ALGORITHM = "RSA"; // 加密算法
  public static KeyPair generateKeyPair() throws Exception {
    Security.addProvider(new BouncyCastleProvider());
    KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM, "BC"); // KeyPairGenerator初始化
    keyPairGen.initialize(2048); // Key大小
    return keyPairGen.generateKeyPair(); // 生成KeyPair
  }
  public static String encrypt(String dataStr, String publicKeyStr) throws Exception {
    Security.addProvider(new BouncyCastleProvider());
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); // Cipher初始化
    byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyStr); // Base64解码PublicKey
    X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(publicKeyBytes); // 转换PublicKey
    KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
    PublicKey publicKey = keyFactory.generatePublic(x509KeySpec);
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    byte[] data = dataStr.getBytes();
    byte[] encryptedData = cipher.doFinal(data); // 加密
    return Base64.getEncoder().encodeToString(encryptedData); // Base64编码返回
  }
  public static String decrypt(String dataStr, String privateKeyStr) throws Exception {
    Security.addProvider(new BouncyCastleProvider());
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); // Cipher初始化
    byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyStr); // Base64解码PrivateKey
    PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(privateKeyBytes); // 转换PrivateKey
    KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
    PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] encryptedData = Base64.getDecoder().decode(dataStr); // Base64解码
    byte[] decryptedData = cipher.doFinal(encryptedData); // 解密
    return new String(decryptedData);
  }
  public static void main(String[] args) throws Exception {
    String dataStr = "Hello, world!";
    KeyPair keyPair = generateKeyPair();
    String publicKeyStr = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded()); // 获取PublicKey
    String privateKeyStr = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded()); // 获取PrivateKey
    String encryptedDataStr = encrypt(dataStr, publicKeyStr);
    String decryptedDataStr = decrypt(encryptedDataStr, privateKeyStr);
    System.out.println("原始数据:" + dataStr);
    System.out.println("加密后的数据:" + encryptedDataStr);
    System.out.println("解密后的数据:" + decryptedDataStr);
  }
}

二、总结

Java提供了很多种加密算法,我们可以根据需求选择合适的加密算法进行使用。本文介绍了常用的MD5、DES、RSA加密算法,涵盖了对称加密算法、非对称加密算法和摘要算法,同时提供了示例代码以便读者参考。加强数据加密安全也是我们应该优先考虑的问题之一。

  
  

评论区