如何解决加密数据,使用UDP将其发送到服务器,然后解密
我想做的是用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;
}
}
我在网站上阅读了如何加密和解密数据,并编写了此类。据我所知,安全密钥的两端必须相同,才能正确解密。有什么方法可以将其转换为字符串或其他内容,然后从服务器端的字符串获取它?目前,我不知道如何在其他程序上对其进行解密。
解决方法
您可以将表示为字节数组的键转换为可作为“文本”发送的形式。 Base64编码是一种常见的实现方式。
但这不能解决您的 real 问题:
有什么方法可以将其转换为字符串或其他东西,然后从服务器端的字符串中获取?
real 问题是如何安全将代表密钥的字符串发送到服务器;也就是说,在传输过程中没有其他人能够窃取密钥。
答案是,如果不使用另一种加密机制,您将无法...
- 一种使用客户端和服务器都已经知道的不同密钥对密钥进行加密的可能性。
- 第二种可能性是使用公共密钥加密。 第三种可能性是使用安全的通信系统来传输密钥。例如,基于量子密码的网络。
这是一个太大的话题,无法在此处讨论。如果您想了解“密钥分发问题”及其解决方案,请找到一本好的教科书。或从这些Wikipedia文章开始:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。