生活随笔
收集整理的這篇文章主要介紹了
常见数据加密的方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MD5加密-不能解密
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Base64;public class MD5Util {/*** MD5加密** @param src 需要加密的字符串* @param isUpper 大小寫* @param bit 加密長度(16,32,64)* @return*/public static String getMD5(String src, boolean isUpper, Integer bit) {String md5 = "";try {// 創建加密對象MessageDigest md = MessageDigest.getInstance("md5");if (bit == 64) {Base64.Encoder encoder = Base64.getEncoder();md5 = encoder.encodeToString(md.digest(src.getBytes(StandardCharsets.UTF_8)));} else {// 計算MD5函數md.update(src.getBytes(StandardCharsets.UTF_8));byte b[] = md.digest();md5 = byteToString(b);if (bit == 16) {String md16 = md5.substring(8, 24);md5 = md16;if (isUpper) {md5 = md5.toUpperCase();}}}} catch (Exception e) {e.printStackTrace();}if (isUpper) {md5 = md5.toUpperCase();}return md5;}public static String byteToString(byte[] bytes) {int i;StringBuffer buffer = new StringBuffer("");for (int offset = 0; offset < bytes.length; offset++) {i = bytes[offset];if (i < 0)i += 256;if (i < 16)buffer.append("0");buffer.append(Integer.toHexString(i));}return buffer.toString();}
}
使用AES-128-CBC加密模式-可以解密
import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;public class PwdUtils {//使用AES-128-CBC加密模式,key需要為16位,key和iv可以相同!private static String KEY = "1234567890123456";private static String IV = "1234567890123456";/*** 加密方法** @param data 要加密的數據* @param key 加密key* @param iv 加密iv* @return 加密的結果* @throws Exception*/public static String encrypt(String data, String key, String iv) throws Exception {try {Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/補碼方式"NoPadding PkcsPaddingint blockSize = cipher.getBlockSize();byte[] dataBytes = data.getBytes();int plaintextLength = dataBytes.length;if (plaintextLength % blockSize != 0) {plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));}byte[] plaintext = new byte[plaintextLength];System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);byte[] encrypted = cipher.doFinal(plaintext);return new Base64().encodeToString(encrypted);} catch (Exception e) {e.printStackTrace();return null;}}/*** 解密方法** @param data 要解密的數據* @param key 解密key* @param iv 解密iv* @return 解密的結果* @throws Exception*/public static String desEncrypt(String data, String key, String iv) throws Exception {try {byte[] encrypted1 = new Base64().decode(data);Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);byte[] original = cipher.doFinal(encrypted1);String originalString = new String(original);return originalString;} catch (Exception e) {e.printStackTrace();return null;}}/*** 使用默認的key和iv加密** @param data* @return* @throws Exception*/public static String encrypt(String data) throws Exception {return encrypt(data, KEY, IV);}/*** 使用默認的key和iv解密** @param data* @return* @throws Exception*/public static String desEncrypt(String data) throws Exception {return desEncrypt(data, KEY, IV);}public static String parseByte2HexStr(byte buf[]) {StringBuffer sb = new StringBuffer();for (int i = 0; i < buf.length; i++) {String hex = Integer.toHexString(buf[i] & 0xFF);if (hex.length() == 1) {hex = '0' + hex;}sb.append(hex.toUpperCase());}return sb.toString();}/*** 測試*/public static void main(String args[]) throws Exception {String test1 = "123456";String test = new String(test1.getBytes(), "UTF-8");String data = null;String key = KEY;String iv = IV;// /g2wzfqvMOeazgtsUVbq1kmJawROa6mcRAzwG1/GeJ4=data = encrypt(test, key, iv);System.out.println("數據:" + test);System.out.println("加密:" + data);String jiemi = desEncrypt(data, key, iv).trim();System.out.println("解密:" + jiemi);}}
RSA非對稱加密-可以解密
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;/*** RSA非對稱加密*/
public class RSAUtil {/*** 私鑰*/private static final String PRIVATE_KEY = "***************************";/*** 公鑰*/private static final String PUBLIC_KEY = "*******************";/*** 加密明文通過公鑰*/public static String encrypt(String data) {RSA rsa = new RSA(PRIVATE_KEY, PUBLIC_KEY);return rsa.encryptBase64(data, KeyType.PublicKey);}/*** 解密密文通過私鑰*/public static String decrypt(String data) {RSA rsa = new RSA(PRIVATE_KEY, PUBLIC_KEY);return rsa.decryptStr(data, KeyType.PrivateKey);}public static void main(String[] args) {System.out.println(encrypt("123456"));System.out.println(decrypt("4sB4flMnI7OxKW3b1tpiZ+mhaTXig0/w67O/imhuHdanC88QP9onAGM7YKelvcE4QjFY4jUldMr5seslsauEGNFIgE4MRkX5YrEYRkoa0JMWCNoRjUnI1CO9kvaBYI29NrVnF2LceiRQ0Y3toA1QBdyHYyF4avTo6re4BddjxaQ=\r\n" + ""));}}
總結
以上是生活随笔為你收集整理的常见数据加密的方式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。