本文介绍了将Key转换为String并返回Key Java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
所以我正在尝试将Key转换为字符串,以便我可以使用System.out显示它,然后我想将其转换回Key。我能够将它转换为带有BASE64Encoder的字符串,但是我在转换它时遇到了问题。这是我的源代码:
so I'm trying to convert a Key into a string so I can display it with System.out, and then I want to convert it back to a Key. I am able to convert it to a string with BASE64Encoder, but I'm having problems converting it back. Here is my source code:
public class Encryption extends Applet {
Key keyOrig;
BASE64Decoder decoder = new BASE64Decoder();
BASE64Encoder encoder = new BASE64Encoder();
public void init() {
try {
keyOrig = generateKey();
String keyString = encoder.encode(keyOrig.getEncoded());
System.out.println("Key: "+keyString);
Key key = new SecretKeySpec(keyString.getBytes(),0,keyString.getBytes().length, "DES");
String message = "This is hacker proof!";
System.out.println("Message is: "+message);
String encryptedMessage = encrypt(message,key);
System.out.println("Message encrypted: "+ encryptedMessage);
String decryptedMessage = decrypt(encryptedMessage,key);
System.out.println("Message decrypted: "+ decryptedMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
public Key generateKey() throws NoSuchAlgorithmException {
KeyGenerator generator;
generator = KeyGenerator.getInstance("DES");
generator.init(new SecureRandom());
return keyOrig = generator.generateKey();
}
@SuppressWarnings("unused")
public String encrypt(String message, Key key)
throws IllegalBlockSizeException, BadPaddingException,
NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, UnsupportedEncodingException {
// Get a cipher object.
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
// Gets the raw bytes to encrypt, UTF8 is needed for
// having a standard character set
byte[] stringBytes = message.getBytes("UTF8");
// encrypt using the cypher
byte[] raw = cipher.doFinal(stringBytes);
// converts to base64 for easier display.
@SuppressWarnings("restriction")
BASE64Encoder encoder = new BASE64Encoder();
String base64 = encoder.encode(raw);
return base64;
}
public String decrypt(String encrypted, Key key) throws InvalidKeyException,
NoSuchAlgorithmException, NoSuchPaddingException,
IllegalBlockSizeException, BadPaddingException, IOException {
// Get a cipher object.
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
// decode the BASE64 coded message
BASE64Decoder decoder = new BASE64Decoder();
byte[] raw = decoder.decodeBuffer(encrypted);
// decode the message
byte[] stringBytes = cipher.doFinal(raw);
// converts the decoded message to a String
String clear = new String(stringBytes, "UTF8");
return clear;
}
}
推荐答案
你永远不要使用你的 BASE64Decoder
取消你的字符串64。
You never use your BASE64Decoder
to un-base-64 your string.
替换它:
Key key = new SecretKeySpec(keyString.getBytes(),0,keyString.getBytes().length, "DES");
with
byte[] encodedKey = decoder.decodeBuffer(keyString);
Key key = new SecretKeySpec(encodedKey,0,encodedKey.length, "DES");
这篇关于将Key转换为String并返回Key Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!