哎呀,说到Java实现加密技术,别急,今天咱们不走寻常路,直接给你端上一盘“保密秘籍大拼盘”,让你悄悄变身代码界的007。不管你是想给自己写的小程序加点“隐身斗篷”,还是老板临时塞给你个加密活儿,本文都会给你点儿干货,不用担心被钥匙忘家或者密码泄露后怀疑人生。
Java加密主要分三大类:对称加密、非对称加密和哈希加密。 先来个快速导览,方便后续抄作业~
搞懂了大类,咱们直接甩出最接地气的代码段,让你边学边跑,路人也能秒懂。
先上点对称加密的招数,Java的javax.crypto包就是你最好的小伙伴。下面用AES算法做个示范,让你家密码优雅变身“密文侠”!
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class AESDemo {
public static void main(String[] args) throws Exception {
String data = "我要保密,这条消息只有你能看!";
// 1. 生成AES密钥
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 128位密钥
SecretKey secretKey = keyGen.generateKey();
// 2. 加密
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encrypted = cipher.doFinal(data.getBytes());
System.out.println("加密结果:" + bytesToHex(encrypted));
// 3. 解密
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println("解密结果:" + new String(decrypted));
}
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X", b));
}
return sb.toString();
}
}
看到了没,几步走,密钥随便生成一手,明文直接秒变乱七八糟的16进制密码串,想开锁还得是那把密钥!简单粗暴,适合初学者体验。别忘了,关键在于密钥的保存,泄密那可是开了潘多拉魔盒。
接下来,咱们跳个档,干点更炫酷的——非对称加密。Java里用KeyPairGenerator玩转RSA。公钥别人看着放心用来给你加密,私钥你捂得紧紧当宝贝。
import java.security.*;
import javax.crypto.Cipher;
public class RSADemo {
public static void main(String[] args) throws Exception {
String data = "非对称加密了解一下!";
// 1. 生成密钥对
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048);
KeyPair keyPair = keyPairGen.generateKeyPair();
PublicKey pubKey = keyPair.getPublic();
PrivateKey priKey = keyPair.getPrivate();
// 2. 公钥加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] encryptedData = cipher.doFinal(data.getBytes());
System.out.println("RSA加密:“" + bytesToHex(encryptedData) + "”");
// 3. 私钥解密
cipher.init(Cipher.DECRYPT_MODE, priKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println("RSA解密:" + new String(decryptedData));
}
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for(byte b : bytes) {
sb.append(String.format("%02X", b));
}
return sb.toString();
}
}
这段代码简直就是“加密界的VIP通行证”,灵活而强力,保障重要数据无敌安全。但这也提醒一句,RSA加解密太频繁会拖慢程序,适合小批量数据加密。
下面轻松点,聊聊哈希算法,数据验真不二法门。MD5和SHA-1(虽然有点老了,黑客笑着打酱油)一度风靡,SHA-256和SHA-3更是加密圈的硬核担当,用Java的MessageDigest轻松实现:
import java.security.MessageDigest;
public class HashDemo {
public static void main(String[] args) throws Exception {
String data = "密码123456";
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] md5Hash = md5.digest(data.getBytes());
System.out.println("MD5:" + bytesToHex(md5Hash));
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] shaHash = sha256.digest(data.getBytes());
System.out.println("SHA-256:" + bytesToHex(shaHash));
}
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for(byte b : bytes) {
sb.append(String.format("%02X", b));
}
return sb.toString();
}
}
哈希加密的好处是速度飞快,生成的码儿长度固定,适合存储密码HASH,不用担心谁能“解密”密码,只要数据库没被黑就好。顺带一提,真正做密码保存最好带点儿盐(salt),加盐哈希才是防盗号神器。
不过,各位Java小伙伴,光有代码还不够,得搞清楚几件事儿,才能直奔主题不中招:
写加密代码,总是在“安全”与“性能”间跳探戈,想快又想稳,咱只能挑个平衡点,活着就是要开心嘛,别把代码写成报错堆积的地狱。
顺便来个广告段子,算你们走运!玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink,别错过!一不小心金币到手软,钱包鼓鼓哟~
说了这么多,你是不是已经按捺不住想动手捣鼓了?别急,拿起键盘,敲代码的时候别忘了喝杯奶茶,脑子灵光,手感才顺滑。代码其实很简单,加密嘛,就是悄悄给信息穿件隐形斗篷。咱下次见,代码还没写完呢,咋整?