【发布时间】:2020-08-14 03:05:24
【问题描述】:
我要做的是使用 javax.crypto 将字符串加密为 byte[],通过 DatagramSocket 发送,然后在接收端解密。
public static final String UNICODE = "UTF-8";
private SecretKey key;
private Cipher cipher;
public StringHandler() {
try {
key = generateKey("AES");
cipher = Cipher.getInstance("AES");
} catch (Exception e) {
e.printStackTrace();
}
}
private SecretKey generateKey(String type) throws Exception {
KeyGenerator gen = KeyGenerator.getInstance(type);
SecretKey key = gen.generateKey();
return key;
}
public byte[] encrypt(String msg) {
try {
byte[] data = msg.getBytes(UNICODE);
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(data);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String decrypt(byte[] data) {
try {
cipher.init(Cipher.DECRYPT_MODE, key);
return new String(cipher.doFinal(data), UNICODE);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
我在一个网站上阅读了如何加密和解密数据,并编写了这个课程。据我所知,双方的安全密钥必须相同才能正确解密。有没有办法将它转换为字符串或其他东西,然后从服务器端的字符串中获取它?目前我不知道如何在不同的程序上解密它。
【问题讨论】:
-
好吧,要么您有密钥分配问题,要么您需要使用编码到程序中的固定密钥。
-
实际上,您似乎只是在问如何将 SecretKey 转换为 String 并返回。见stackoverflow.com/questions/5355466/…
标签: java cryptography