利用DES算法加密解密学号,JAVA代码实现
时间: 2023-06-09 22:08:26 浏览: 157
好的,关于利用DES算法加密解密学号的JAVA代码实现,我将为您提供以下代码:
```
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class DES {
private static final String KEY = "12345678"; // 这里将密钥定义为 12345678
// 加密方法
public static String encrypt(String data) throws Exception {
// 创建一个DESKeySpec对象,并传入密钥
DESKeySpec desKeySpec = new DESKeySpec(KEY.getBytes());
// 创建一个SecretKeyFactory对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
// 通过SecretKeyFactory对象将DESKeySpec转换成SecretKey对象
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
// 创建一个Cipher对象,并指定加密算法
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
// 初始化Cipher对象,指定为加密模式,并传入密钥
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 调用Cipher对象的doFinal方法进行加密
byte[] encryptedData = cipher.doFinal(data.getBytes());
// 将加密后的byte数组转换成十六进制字符串,并返回
return byteArrayToHexString(encryptedData);
}
// 解密方法
public static String decrypt(String encryptedData) throws Exception {
// 创建一个DESKeySpec对象,并传入密钥
DESKeySpec desKeySpec = new DESKeySpec(KEY.getBytes());
// 创建一个SecretKeyFactory对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
// 通过SecretKeyFactory对象将DESKeySpec转换成SecretKey对象
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
// 创建一个Cipher对象,并指定加密算法
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
// 初始化Cipher对象,指定为解密模式,并传入密钥
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// 将十六进制字符串转换成byte数组
byte[] data = hexStringToByteArray(encryptedData);
// 调用Cipher对象的doFinal方法进行解密
byte[] decryptedData = cipher.doFinal(data);
// 将解密后的byte数组转换成字符串,并返回
return new String(decryptedData);
}
// 将byte数组转换成十六进制字符串
private static String byteArrayToHexString(byte[] byteArray) {
StringBuilder sb = new StringBuilder();
for (byte b : byteArray) {
String hex = Integer.toHexString(0xFF & b);
if (hex.length() == 1) {
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
}
// 将十六进制字符串转换成byte数组
private static byte[] hexStringToByteArray(String hexString) {
int len = hexString.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
+ Character.digit(hexString.charAt(i+1), 16));
}
return data;
}
}
```
以上是一个简单的DES加密解密算法的JAVA代码实现,您可以直接调用该类的encrypt和decrypt方法,对学号进行加密和解密。例如:
```
String studentId = "1900012345"; // 要加密的学号
String encryptedId = DES.encrypt(studentId); // 加密后的学号
System.out.println(encryptedId); // 输出加密后的学号
String decryptedId = DES.decrypt(encryptedId); // 解密后的学号
System.out.println(decryptedId); // 输出解密后的学号
```
请注意,以上仅仅是一个简单的DEA算法实现代码示例,实际应用场景中需要考虑更多的实际问题,例如密钥的保护、算法的安全性等。
阅读全文