Java 如何实现AES加密解密
Java支持许多安全的加密算法,但其中一些算法在安全密集型应用中很脆弱。例如,数据加密标准(DES)加密算法被认为是非常不安全的;使用DES加密的消息已经被暴力破解在一天之内被机器破解,例如电子前沿基金会的(EFF)Deep Crack。
更安全的加密算法是AES – 高级加密标准,这是一种对称加密算法。AES加密被美国用于保护敏感但未分类的材料,因此我们可以说它是足够安全的。
1.AES加密和解密
让我们来看一下这个Java程序中使用AES加密的示例。
import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AES { private static SecretKeySpec secretKey; private static byte[] key; public static void setKey(final String myKey) { MessageDigest sha = null; try { key = myKey.getBytes("UTF-8"); sha = MessageDigest.getInstance("SHA-1"); key = sha.digest(key); key = Arrays.copyOf(key, 16); secretKey = new SecretKeySpec(key, "AES"); } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { e.printStackTrace(); } } public static String encrypt(final String strToEncrypt, final String secret) { try { setKey(secret); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return Base64.getEncoder() .encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))); } catch (Exception e) { System.out.println("Error while encrypting: " + e.toString()); } return null; } public static String decrypt(final String strToDecrypt, final String secret) { try { setKey(secret); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); cipher.init(Cipher.DECRYPT_MODE, secretKey); return new String(cipher.doFinal(Base64.getDecoder() .decode(strToDecrypt))); } catch (Exception e) { System.out.println("Error while decrypting: " + e.toString()); } return null; } }
2.加密和解密示例
让我们测试是否能够从加密的字符串中获取解密的字符串。
final String secretKey = "ssshhhhhhhhhhh!!!!"; String originalString = "howtodoinjava.com"; String encryptedString = AES.encrypt(originalString, secretKey) ; String decryptedString = AES.decrypt(encryptedString, secretKey) ; System.out.println(originalString); System.out.println(encryptedString); System.out.println(decryptedString);
程序输出:
howtodoinjava.com Tg2Nn7wUZOQ6Xc+1lenkZTQ9ZDf9a2/RBRiqJBCIX6o= howtodoinjava.com
请在下方留下您的问题和评论。