21xrx.com
2024-11-05 21:38:58 Tuesday
登录
文章检索 我的文章 写文章
Java中常用的加密算法及其应用案例
2023-06-16 14:05:30 深夜i     --     --
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、非对称加密、公钥密码体制

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复