Java 生成DES密钥并使用密码进行加密

Java 生成DES密钥并使用密码进行加密,java,cryptography,Java,Cryptography,我想学习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 keyge

我想学习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);
}

您忘记编写方法,并且变量名中存在拼写错误:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class Gen_DESAES_key{

    public static void main(String[] args) {
        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);
    }
}

您忘记编写方法,并且变量名中存在拼写错误:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class Gen_DESAES_key{

    public static void main(String[] args) {
        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);
    }
}
修复#1:修复变量名 变量名是用Java编写的。变量名是
desKey
,而不是
desKey

修正2:将代码包装到方法中并处理异常 除此之外,您必须将代码包装到一个方法中,如下所示:

import javax.crypto.*;
导入java.security.InvalidKeyException;
导入java.security.NoSuchAlgorithmException;
公共类Gen_DESAES_密钥{
公共静态void main(字符串[]args)抛出NoSuchAlgorithmException,
没有这样的例外,
BadPaddingException,
非法区块大小例外,
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_模式,desKey);
字节[]encryptedMessage=desCipher.doFinal(消息);
System.out.println(新字符串(encryptedMessage));
}
}
请注意,您的代码将抛出一组异常,这些异常必须由
try
-
catch
块处理,或者在方法的
throws
子句中声明。有关更多详细信息,请参阅

奖金#1:使用Base64 为了避免在显示加密消息时出现一些奇怪的字符,您可以使用。如果您使用的是Java 8或更高版本,则可以使用:

System.out.println(Base64.getEncoder().encodeToString(encryp‌​TED消息);
奖金#2:解密您的邮件 要解密加密邮件,请使用:

desCipher.init(Cipher.DECRYPT_模式,desKey);
字节[]decryptedMessage=desCipher.doFinal(encryptedMessage);
System.out.println(新字符串(解密消息));
Fix#1:修复变量名 变量名是用Java编写的。变量名是
desKey
,而不是
desKey

修正2:将代码包装到方法中并处理异常 除此之外,您必须将代码包装到一个方法中,如下所示:

import javax.crypto.*;
导入java.security.InvalidKeyException;
导入java.security.NoSuchAlgorithmException;
公共类Gen_DESAES_密钥{
公共静态void main(字符串[]args)抛出NoSuchAlgorithmException,
没有这样的例外,
BadPaddingException,
非法区块大小例外,
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_模式,desKey);
字节[]encryptedMessage=desCipher.doFinal(消息);
System.out.println(新字符串(encryptedMessage));
}
}
请注意,您的代码将抛出一组异常,这些异常必须由
try
-
catch
块处理,或者在方法的
throws
子句中声明。有关更多详细信息,请参阅

奖金#1:使用Base64 为了避免在显示加密消息时出现一些奇怪的字符,您可以使用。如果您使用的是Java 8或更高版本,则可以使用:

System.out.println(Base64.getEncoder().encodeToString(encryp‌​TED消息);
奖金#2:解密您的邮件 要解密加密邮件,请使用:

desCipher.init(Cipher.DECRYPT_模式,desKey);
字节[]decryptedMessage=desCipher.doFinal(encryptedMessage);
System.out.println(新字符串(解密消息));

您会遇到什么编译器错误?这是错误:线程“main”java.lang中出现异常。错误:未解决的编译问题:无法将deskey解析为apples.main(apples.java:7)中Gen_DESAES_key.enc(Gen_DESAES_key.java:15)处的变量这是您的问题(或至少其中一个)。您将其声明为
desKey
,但随后尝试使用
desKey
——大写在Java中很重要。请阅读。这些是已检查异常的示例,编译器要求您处理这些异常。快速而肮脏的方法是添加一个
throws
子句,如下所示。@Benjamin
System.out.println(新字符串(decryptedMessage))System.out.println(Base64.getEncoder().encodeToString(encryptedMessage))。你得到了什么编译器错误?这是错误:线程“main”java.lang中出现异常。错误:未解决的编译问题:deskey无法在apples.main(apples.java:7)的Gen_DESAES_key.enc(Gen_DESAES_key.java:15)处解析为变量。这是你的问题(或至少其中一个)。您将其声明为
desKey
,但随后尝试使用
desKey
——大写在Java中很重要。请阅读。这些是已检查异常的示例,编译器要求您处理这些异常。快速而肮脏的方法是添加一个
throws
子句,如下所示。@Benjamin
System.out.println(新字符串(decryptedMessage))System.out.println(Base64.getEncoder().encod