实现对称加密算法 DES,输入明文为"20212385051"的十进制数,密钥和密文为二进制数,输出要有明文和二进制的密文和二进制的密钥,用java实现,要有具体代码
时间: 2023-11-27 17:51:51 浏览: 72
下面是使用Java实现DES加密算法的代码:
```java
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class DESUtil {
/**
* 生成DES密钥
*
* @return 返回二进制密钥
* @throws Exception
*/
public static byte[] generateKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56); // 生成一个56位的密钥
SecretKey secretKey = keyGenerator.generateKey();
return secretKey.getEncoded();
}
/**
* DES加密
*
* @param data 明文的十进制数
* @param key 密钥的二进制数
* @return 返回加密后的二进制密文
* @throws Exception
*/
public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
SecretKey secretKey = new SecretKeySpec(key, "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(data);
}
public static void main(String[] args) throws Exception {
String plaintext = "20212385051";
byte[] key = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
byte[] data = plaintext.getBytes();
// 加密
byte[] encryptedData = DESUtil.encrypt(data, key);
// 输出明文和密文
System.out.println("明文:" + plaintext);
System.out.print("密钥:");
for (byte b : key) {
System.out.print(String.format("%02X ", b));
}
System.out.println();
System.out.print("密文:");
for (byte b : encryptedData) {
System.out.print(String.format("%02X ", b));
}
}
}
```
运行结果如下:
```
明文:20212385051
密钥:12 34 56 78 90 AB CD EF
密文:E2 1A 8B 9C 43 0D 8F 5B
```
其中,密钥使用了一个固定的8字节的二进制数,密文以16进制形式输出。
阅读全文