在Java中,字符串是一种常见的数据类型,我们经常需要对其进行加密和解密。这篇文章将会介绍在Java中字符串如何进行加密和解密。

一、加密算法

Java中字符串如何进行加密和解密

在Java中,常用的加密算法有MD5、SHA1和AES等。下面对这些加密算法进行简单介绍。

  1. MD5

MD5是一种常见的加密算法,它可以将任意长度的字符串加密成一个固定长度(128位)的字符串。Java中提供了java.security.MessageDigest类来实现MD5加密算法。

生成MD5加密后的字符串的代码如下:

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class MD5Util {

// 生成MD5加密后的字符串

public static String getMD5(String str) throws NoSuchAlgorithmException {

MessageDigest md = MessageDigest.getInstance(\MD5\        md.update(str.getBytes());

byte[] b = md.digest();

StringBuilder sb = new StringBuilder();

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

int val = ((int) b[i]) & 0xff;

if (val < 16) {

sb.append(\0\            }

sb.append(Integer.toHexString(val));

}

return sb.toString();

}

}
  1. SHA1

SHA1也是一种常见的加密算法,它可以将任意长度的字符串加密成一个固定长度(160位)的字符串。Java中提供了java.security.MessageDigest类来实现SHA1加密算法。

生成SHA1加密后的字符串的代码如下:

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class SHA1Util {

// 生成SHA1加密后的字符串

public static String getSHA1(String str) throws NoSuchAlgorithmException {

MessageDigest md = MessageDigest.getInstance(\SHA1\        md.update(str.getBytes());

byte[] b = md.digest();

StringBuilder sb = new StringBuilder();

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

int val = ((int) b[i]) & 0xff;

if (val < 16) {

sb.append(\0\            }

sb.append(Integer.toHexString(val));

}

return sb.toString();

}

}
  1. AES

AES是一种高级加密标准,它可以将任意长度的字符串加密成一个固定长度(128位、192位或256位)的字符串。Java中提供了javax.crypto.Cipher类来实现AES加密算法。

生成AES加密后的字符串的代码如下:

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

public class AESUtil {

// 生成AES加密后的字符串

public static String getAES(String str, String key) throws Exception {

// 生成密钥

KeyGenerator kgen = KeyGenerator.getInstance(\AES\        kgen.init(128);

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec keySpec = new SecretKeySpec(enCodeFormat, \AES\        // 初始化加密器

Cipher cipher = Cipher.getInstance(\AES\        cipher.init(Cipher.ENCRYPT_MODE, keySpec);

// 加密

byte[] byteContent = str.getBytes(\utf-8\        byte[] result = cipher.doFinal(byteContent);

return new String(result, \utf-8\    }

}

二、解密算法

解密算法是将加密后的字符串还原成原始字符串的算法。在Java中,常用的解密算法有MD5、SHA1和AES等。

  1. MD5

由于MD5算法是不可逆的,所以在Java中不提供MD5的解密算法。

  1. SHA1

由于SHA1算法是不可逆的,所以在Java中不提供SHA1的解密算法。

  1. AES

AES算法可以使用相同的密钥将加密后的字符串解密成原始字符串。Java中提供了javax.crypto.Cipher类来实现AES解密算法。

生成AES解密后的字符串的代码如下:

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

public class AESUtil {

// 生成AES解密后的字符串

public static String getAES(String str, String key) throws Exception {

// 生成密钥

KeyGenerator kgen = KeyGenerator.getInstance(\AES\        kgen.init(128);

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec keySpec = new SecretKeySpec(enCodeFormat, \AES\        // 初始化解密器

Cipher cipher = Cipher.getInstance(\AES\        cipher.init(Cipher.DECRYPT_MODE, keySpec);

// 解密

byte[] byteContent = str.getBytes(\utf-8\        byte[] result = cipher.doFinal(byteContent);

return new String(result, \utf-8\    }

}

三、总结

本文介绍了在Java中字符串如何进行加密和解密。通过对MD5、SHA1和AES加密算法的介绍,我们可以了解到在Java中如何实现这些算法。