面试官:说一下你常用的加密算法
加密算法概述
加密算法是信息安全领域中常用的技术手段,用于保护敏感数据的安全性。通过对数据进行加密操作,可以使得数据在传输、存储等环节中难以被非法获取和篡改。常用的加密算法包括对称加密算法、非对称加密算法和哈希算法等。
对称加密算法
对称加密算法采用同一秘钥进行数据的加密和解密操作,常见的对称加密算法有DES、3DES、AES等。其中,DES(Data Encryption Standard)是一种使用对称密钥的加密算法,采用64位的秘钥对64位的明文数据块进行加密,加密后输出64位的密文数据块。3DES(Triple Data Encryption Algorithm)是DES算法的加强版,通过多次DES的迭代加密操作提高加密强度。AES(Advanced Encryption Standard)是目前最常用的对称加密算法,支持128位、192位和256位等不同密钥长度。
非对称加密算法
非对称加密算法使用两个密钥,分别是公钥和私钥。公钥用于加密数据,私钥用于解密数据,因此私钥需要保密,公钥可以公开。常见的非对称加密算法有RSA、DSA等。RSA是目前最广泛使用的非对称加密算法,其基本原理是利用质数分解困难性实现公钥和私钥的生成。DSA(Digital Signature Algorithm)是一种数字签名算法,用于身份验证和数据完整性验证。
哈希算法
哈希算法,也称为散列算法,将任意长度的数据映射为固定长度的哈希值。常见的哈希算法有MD5、SHA-1、SHA-256等。MD5(Message Digest Algorithm 5)是一种常用的哈希算法,输出128位的哈希值。SHA(Secure Hash Algorithm)是一系列的哈希函数标准,包括SHA-1、SHA-256等不同版本,输出不同位数的哈希值。
示例代码: // 使用Java实现对称加密算法AES import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import java.nio.charset.StandardCharsets; import java.util.Base64; public class AESEncryption { public static void main(String[] args) throws Exception { // 生成AES秘钥 KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(256); SecretKey secretKey = keyGenerator.generateKey(); // 获取Cipher实例 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); // 明文数据 String plainText = "Hello, world!"; // AES加密 byte[] cipherText = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8)); // 输出加密结果 System.out.println("Cipher Text (Base64): " + Base64.getEncoder().encodeToString(cipherText)); } }