我想用 java 学习密码学,我在互联网上找到了 这些幻灯片。在第 9 页上,我找到了一个示例,并尝试使用它。但是,以下代码未编译。错误在哪里?
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class Gen_DESAES_key{
byte[] message = "Hello World".getBytes();
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
SecretKey desKey = keygenerator.generateKey();
Cipher desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
desCipher.init(Cipher.ENCRYPT_MODE,deskey);
byte[] encryptedMessage = desCipher.doFinal(message);
}
Run Code Online (Sandbox Code Playgroud)
Java 中的变量名区分大小写。您的变量名称是desKey而不是deskey。
除此之外,您必须将代码包装到一个方法中,如下所示:
import javax.crypto.*;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class Gen_DESAES_key {
public static void main(String[] args) throws NoSuchAlgorithmException,
NoSuchPaddingException,
BadPaddingException,
IllegalBlockSizeException,
InvalidKeyException {
byte[] message = "Hello World".getBytes();
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
SecretKey desKey = keygenerator.generateKey();
Cipher desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
desCipher.init(Cipher.ENCRYPT_MODE, desKey);
byte[] encryptedMessage = desCipher.doFinal(message);
System.out.println(new String(encryptedMessage));
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您的代码将抛出一堆异常,这些异常必须由try-catch块处理或在throws方法的子句中声明。有关更多详细信息,请参阅文档。
为了避免在显示加密消息时出现一些奇怪的字符,您可以使用Base64 对其进行编码。如果您使用的是 Java 8 或更高版本,则可以使用java.util.Base64:
System.out.println(Base64.getEncoder().encodeToString(encryp??tedMessage));
Run Code Online (Sandbox Code Playgroud)
要解密您的加密消息,请使用:
desCipher.init(Cipher.DECRYPT_MODE, desKey);
byte[] decryptedMessage = desCipher.doFinal(encryptedMessage);
System.out.println(new String(decryptedMessage));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4976 次 |
| 最近记录: |