一、对称加密算法
对称加密算法是一种加密和解密使用同样密钥的算法,常见的对称加密算法有DES、3DES、AES等。在Java中,通过Cipher类提供对称加密的实现。
下面为使用AES对称加密算法的代码示例:
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AESEncryptUtil { private static final String AES_ALGORITHM = "AES/ECB/PKCS5Padding"; private static final String CHARSET_NAME = "UTF-8"; public static byte[] encrypt(String content, String password) throws Exception { Cipher cipher = Cipher.getInstance(AES_ALGORITHM); byte[] byteContent = content.getBytes(CHARSET_NAME); SecretKeySpec key = new SecretKeySpec(password.getBytes(CHARSET_NAME), "AES"); cipher.init(Cipher.ENCRYPT_MODE, key); return cipher.doFinal(byteContent); } public static byte[] decrypt(byte[] content, String password) throws Exception { Cipher cipher = Cipher.getInstance(AES_ALGORITHM); SecretKeySpec key = new SecretKeySpec(password.getBytes(CHARSET_NAME), "AES"); cipher.init(Cipher.DECRYPT_MODE, key); return cipher.doFinal(content); } }
我们可以看到,在使用Java对称加密算法的时候,我们需要指定具体的算法、加密模式和填充方式,并需要提供密钥。
二、非对称加密算法
非对称加密算法是一种加密和解密使用不同密钥的算法,常见的非对称加密算法有RSA、DSA等。在Java中,通过KeyPairGenerator类提供非对称加密算法的实现。
下面为使用RSA非对称加密算法的代码示例:
import java.security.KeyPairGenerator; import java.security.KeyPair; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; public class RSAEncryptUtil { private static final String RSA_ALGORITHM = "RSA"; private static final String SIGNATURE_ALGORITHM = "SHA1withRSA"; private static final String CHARSET_NAME = "UTF-8"; public static KeyPair getKeyPair() throws Exception { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(RSA_ALGORITHM); keyPairGenerator.initialize(2048); KeyPair keyPair = keyPairGenerator.generateKeyPair(); return keyPair; } public static byte[] signature(String content, PrivateKey privateKey) throws Exception { Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); signature.initSign(privateKey); byte[] byteContent = content.getBytes(CHARSET_NAME); signature.update(byteContent); return signature.sign(); } public static boolean verify(String content, byte[] sign, PublicKey publicKey) throws Exception { Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); signature.initVerify(publicKey); byte[] byteContent = content.getBytes(CHARSET_NAME); signature.update(byteContent); return signature.verify(sign); } }
在使用Java非对称加密算法的时候,我们需要首先生成公钥私钥对,然后根据具体算法和填充方式进行签名、验证等操作。
三、哈希算法
哈希算法是一种将任意长度的消息压缩到某一固定长度的算法,常见的哈希算法有MD5、SHA-1、SHA-256等。在Java中,通过MessageDigest类提供哈希算法的实现。
下面为使用MD5哈希算法的代码示例:
import java.security.MessageDigest; public class MD5Util { private static final String MD5_ALGORITHM = "MD5"; private static final String CHARSET_NAME = "UTF-8"; public static String md5(String content) throws Exception { MessageDigest messageDigest = MessageDigest.getInstance(MD5_ALGORITHM); byte[] byteContent = content.getBytes(CHARSET_NAME); byte[] md5Bytes = messageDigest.digest(byteContent); return byteArrayToHexString(md5Bytes); } private static String byteArrayToHexString(byte[] data) { StringBuilder stringBuilder = new StringBuilder(); for (byte b : data) { stringBuilder.append(String.format("%02x", b & 0xff)); } return stringBuilder.toString(); } }
在使用Java哈希算法的时候,我们需要选择具体算法,并将需要进行哈希的内容转换为字节数组并进行哈希计算,最终的哈希结果一般以十六进制字符串的形式呈现。
四、数字证书
数字证书是一种用于保证网络传输的信息安全的一种安全技术,其利用了非对称加密算法和数字签名算法。在Java中,通过KeyStore类提供数字证书的管理和使用。
下面为使用数字证书的代码示例:
import java.io.FileInputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.cert.Certificate; public class DigitalCertificateUtil { private static final String KEYSTORE_PATH = "/path/to/keystore"; private static final String KEYSTORE_PASSWORD = "keystore_password"; private static final String CERTIFICATE_ALIAS = "certificate_alias"; private static final String CERTIFICATE_PASSWORD = "certificate_password"; public static PrivateKey getPrivateKey() throws Exception { KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream fileInputStream = new FileInputStream(KEYSTORE_PATH); keyStore.load(fileInputStream, KEYSTORE_PASSWORD.toCharArray()); return (PrivateKey) keyStore.getKey(CERTIFICATE_ALIAS, CERTIFICATE_PASSWORD.toCharArray()); } public static Certificate getCertificate() throws Exception { KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream fileInputStream = new FileInputStream(KEYSTORE_PATH); keyStore.load(fileInputStream, KEYSTORE_PASSWORD.toCharArray()); return keyStore.getCertificate(CERTIFICATE_ALIAS); } }
在使用Java数字证书的时候,我们需要指定证书的Keystore路径、密码以及证书的别名和密码,并通过KeyStore类获取和管理证书和私钥。