【发布时间】:2015-08-10 07:32:58
【问题描述】:
我想创建一个功能性的 Java 聊天应用程序。 所以我有一个小应用程序,它允许用户通过服务器类连接并通过客户端类相互交谈,我已经开始添加加密。我在我的 Java 聊天应用程序中解密来自其他客户端的输出时遇到问题。
有人可以帮帮我吗?
我的代码的sn-p包含在下面:
CLIENTGUI.JAVA 类(加密是一个被点击的按钮)
if(o == encrypt) {
String change = null;
try{
change = tf.getText();
change = FileEncryption.encryptString(change);
tf.setText("" + change);
return;
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
finally{
}
文件加密.JAVA
public class FileEncryption {
//Initial Vector
public static final byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
//EncryptAndDecrypt String -> Input : PlainText + Return : CipherText+DecipherText
public static String encryptString(String src) throws Exception
{
String dst="";
//Not Input!
if(src == null || src.length()==0)
return "";
//Encryption Setting
byte[] k="Multimediaproces".getBytes();
SecretKeySpec Key = new SecretKeySpec(k,"AES");
IvParameterSpec ivspec = new IvParameterSpec(iv);
Cipher encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
encryptCipher.init(Cipher.ENCRYPT_MODE,Key,ivspec);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CipherOutputStream cout = new CipherOutputStream(baos,encryptCipher);
cout.write(src.getBytes());
cout.flush(); //ByteOutputStream -> Write Encryption Text
cout.close();
// in encrypt method
dst = DatatypeConverter.printHexBinary(baos.toByteArray());
return dst;
}
//String src -> EncryptedData
public static String decryptString(String src) throws Exception
{
//src value is Encrypted Value!
//So, src value -> Not Byte!
String dst="";
byte[] encryptedBytes = DatatypeConverter.parseHexBinary(src);;
//Not Input!
if(src == null || src.length()==0)
return "";
//Decryption Setting
IvParameterSpec ivspec = new IvParameterSpec(iv);
byte[] k="Multimediaproces".getBytes();
SecretKeySpec Key = new SecretKeySpec(k,"AES");
Cipher decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
decryptCipher.init(Cipher.DECRYPT_MODE,Key,ivspec);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ByteArrayInputStream bais = new ByteArrayInputStream(encryptedBytes);
CipherInputStream cin = new CipherInputStream(bais,decryptCipher);
byte[] buf = new byte[1024];
int read;
while((read=cin.read(buf))>=0) //reading encrypted data!
{
baos.write(buf,0,read); //writing decrypted data!
}
// closing streams
cin.close();
dst = new String(baos.toByteArray());
return dst;
}
}
问题是当我尝试解密输入以下代码的代码时: if(o == 解密) {
try{
msg = tf.getText();
msg = FileEncryption.decryptString(msg);
fop.
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
}
目前,它允许我加密我在文本字段中输入的内容。
它不允许我解密用户在聊天中所说的输出。我为解密包含的当前代码不起作用。
谁能帮帮我?或者对我的程序有什么建议可以帮助它解密?
谢谢
编辑:
【问题讨论】:
-
fop.不是有效的 Java 语句。你的实际代码是什么? -
测试你的加密和解密方法对我来说似乎工作得很好......我想知道是否对当前机器有某种依赖?
-
啊抱歉,fop。不是其中的一部分。解密位是我写的,似乎对我不起作用。
-
@MadProgrammer 对你有用吗?它似乎对我不起作用......你设法解密了吗?
-
我将
String传递给了 encrypt 方法,然后将结果传递给了 decrypt 方法并得到了正确的结果。我将“加密”值转储到标准输出,可以看到它确实被加密了
标签: java encryption aes