在Java中如何实现简单的加密解密函数?
发布时间:2023-06-18 09:20:01
在Java中实现简单的加密解密函数有许多方法,本文将介绍三种最常见和基础的方法。
1. 替换法加密解密函数
替换法加密解密函数是一种非常简单且容易实现的加密解密方法,它通过将明文中的每个字符替换为与之对应的密文字符来实现加密,从而达到隐藏数据的目的。
加密函数代码实现:
public static String encrypt(String str) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] + 3); //加上一个常数值3
}
return new String(chars);
}
解密函数代码实现:
public static String decrypt(String str) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] - 3); //减去一个常数值3
}
return new String(chars);
}
2. 基于位运算的加密解密函数
基于位运算的加密解密函数是另一种常见而简单的加密解密方法,它通过将明文中每个字符的每一位都进行位运算,从而得到密文。
加密函数代码实现:
public static String encrypt(String str) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] ^ 6688); //异或运算
}
return new String(chars);
}
解密函数代码实现:
public static String decrypt(String str) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] ^ 6688);
}
return new String(chars);
}
3. 基于密钥的加密解密函数
基于密钥的加密解密函数是一种更加安全和可靠的加密解密方法,它需要先将密钥和明文按照一定的算法进行混淆,从而得到密文,必须使用相同的密钥才能得到正确的明文。
加密函数代码实现:
public static String encrypt(String str, String key) {
try {
byte[] rawKey = getRawKey(key.getBytes());
byte[] encrypted = encrypt(rawKey, str.getBytes());
return new String(Base64.encode(encrypted));
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(128, sr);
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
return raw;
}
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}
解密函数代码实现:
public static String decrypt(String str, String key) {
try {
byte[] rawKey = getRawKey(key.getBytes());
byte[] encrypted = Base64.decode(str.getBytes());
byte[] decrypted = decrypt(rawKey, encrypted);
return new String(decrypted);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}
综上所述,以上三种方法均可用于Java中实现简单的加密解密函数,其中第三种方法更加安全和可靠,适用于对数据安全性要求较高的场合。
