21xrx.com
2025-04-03 02:39:15 Thursday
文章检索 我的文章 写文章
Java中常用的加密算法及其应用案例
2023-06-16 14:05:30 深夜i     12     0
MD5 消息摘要 哈希值

Java是一种常用的编程语言,其内部提供了多种加密算法,可以保护用户的数据安全。在本文中,我们将介绍Java常用的加密算法,包括MD5、SHA、AES和RSA,并给出相应的代码案例。

1. MD5

MD5是一种常用的消息摘要算法,可将任意长度的消息压缩成128位的哈希值。通常用于密码验证和数字签名。在Java中,可以使用java.security.MessageDigest类来实现MD5加密。

代码案例:

import java.security.*;
public class MD5Example {
  public static void main(String[] args) throws Exception {
    String input = "hello";
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(input.getBytes());
    byte[] digest = md.digest();
    System.out.println("MD5 hash value: " + javax.xml.bind.DatatypeConverter.printHexBinary(digest));
  }
}

2. SHA

SHA(安全哈希算法)是一个密码学安全散列算法,可将任意长度的字节串“压缩”到一个固定长度的字节串中。与MD5不同,SHA不会产生冲突。在Java中,可以使用java.security.MessageDigest类来实现SHA加密。

代码案例:

import java.security.*;
public class SHAExample {
  public static void main(String[] args) throws Exception {
    String input = "hello";
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    md.update(input.getBytes());
    byte[] digest = md.digest();
    System.out.println("SHA hash value: " + javax.xml.bind.DatatypeConverter.printHexBinary(digest));
  }
}

关键词:SHA、散列算法、字节串

3. AES

AES(高级加密标准)是一种对称加密算法,可用于加密和解密数据,保护数据的机密性。在Java中,可以使用javax.crypto.Cipher类来实现AES加密和解密。

代码案例:

import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.util.Arrays;
public class AESExample {
  private static final byte[] AES_KEY = "Hello World 1234".getBytes();
  public static void main(String[] args) throws Exception {
    String input = "hello";
    byte[] encrypted = encrypt(input.getBytes(), AES_KEY);
    System.out.println("AES encrypted value: " + javax.xml.bind.DatatypeConverter.printHexBinary(encrypted));
    byte[] decrypted = decrypt(encrypted, AES_KEY);
    System.out.println("AES decrypted value: " + new String(decrypted));
  }
  public static byte[] encrypt(byte[] input, byte[] key) throws Exception {
    SecretKeySpec keySpec = new SecretKeySpec(Arrays.copyOf(key, 16), "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    byte[] iv = cipher.getIV();
    byte[] cipherText = cipher.doFinal(input);
    return Arrays.copyOf(iv, iv.length + cipherText.length);
  }
  public static byte[] decrypt(byte[] input, byte[] key) throws Exception {
    SecretKeySpec keySpec = new SecretKeySpec(Arrays.copyOf(key, 16), "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    byte[] iv = Arrays.copyOfRange(input, 0, 16);
    byte[] cipherText = Arrays.copyOfRange(input, 16, input.length);
    cipher.init(Cipher.DECRYPT_MODE, keySpec, new javax.crypto.spec.IvParameterSpec(iv));
    return cipher.doFinal(cipherText);
  }
}

关键词:AES、对称加密、随机初始化向量

4. RSA

RSA是一种非对称加密算法,严格来说,它不是一种加密算法,而是一种公钥密码体制。在Java中,可以使用java.security.KeyPairGenerator类生成公钥和私钥,使用java.security.Cipher类实现RSA加密和解密。

代码案例:

import java.security.*;
import javax.crypto.*;
public class RSAExample {
  public static void main(String[] args) throws Exception {
    String input = "hello";
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
    kpg.initialize(2048);
    KeyPair kp = kpg.generateKeyPair();
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, kp.getPublic());
    byte[] encrypted = cipher.doFinal(input.getBytes());
    cipher.init(Cipher.DECRYPT_MODE, kp.getPrivate());
    byte[] decrypted = cipher.doFinal(encrypted);
    System.out.println("RSA encrypted value: " + javax.xml.bind.DatatypeConverter.printHexBinary(encrypted));
    System.out.println("RSA decrypted value: " + new String(decrypted));
  }
}

关键词:RSA、非对称加密、公钥密码体制

  
  

评论区