Java客户端实现 DES 加密a) DES 密钥 64 比特可固定输入,也可随机产生; b) 明文可输入英文字符串和中文字符串,例如“abc”,或者 “信安”; c) 可加密 1~200 比特任意长度的明文,若明文不是分组固定长度整数 倍,则要求进行填充,填充方法可参考书本 实现 DES 加密,密文在客户端显示出来,然后传输给服务器端。
时间: 2023-11-26 11:06:42 浏览: 69
以下是Java客户端实现DES加密的示例代码:
```java
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.Scanner;
public class DESClient {
public static void main(String[] args) throws Exception {
// 1. 获取密钥
SecretKey secretKey = getSecretKey();
// 2. 获取明文
String plaintext = getPlainText();
// 3. 进行填充
byte[] paddedPlaintext = padPlaintext(plaintext.getBytes(StandardCharsets.UTF_8));
// 4. 加密
byte[] ciphertext = encrypt(paddedPlaintext, secretKey);
// 5. 将密文转换成Base64字符串并输出
String base64Ciphertext = Base64.getEncoder().encodeToString(ciphertext);
System.out.println("密文:" + base64Ciphertext);
}
/**
* 获取DES密钥
*/
private static SecretKey getSecretKey() throws NoSuchAlgorithmException {
// 可以手动指定密钥,也可以随机生成密钥
String keyString = "0123456789abcdef";
byte[] keyBytes = keyString.getBytes(StandardCharsets.UTF_8);
return new SecretKeySpec(keyBytes, "DES");
}
/**
* 获取明文
*/
private static String getPlainText() {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入明文:");
return scanner.nextLine();
}
/**
* 对明文进行填充
*/
private static byte[] padPlaintext(byte[] plaintext) {
int paddingLength = 8 - (plaintext.length % 8);
byte[] paddedPlaintext = new byte[plaintext.length + paddingLength];
System.arraycopy(plaintext, 0, paddedPlaintext, 0, plaintext.length);
for (int i = plaintext.length; i < paddedPlaintext.length; i++) {
paddedPlaintext[i] = (byte) paddingLength;
}
return paddedPlaintext;
}
/**
* DES加密
*/
private static byte[] encrypt(byte[] plaintext, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(plaintext);
}
}
```
注意:上述示例代码中使用的是ECB模式和NoPadding填充方式,这种方式存在安全风险,实际应用中应该使用更安全的模式和填充方式。此外,由于DES算法已经不被推荐使用,建议使用更安全的AES算法。
阅读全文