求高手点拨:“一个加密算法的完善方案”.
高手,您好:我在写一个IM系统,采用的技术是Java的Socket通信和Swing,为了达到让用户“能够保证自己的隐私不被窃听”的“初步需求实现”.
我采用了下面的这两个类型,进行我的系统通信数据的加密.
(Systemcrypt类:)
package s_port_package_BeiJing;
public class Systemcrypt{
public static String HloveyRC4(String aInput,String aKey)
{
int[] iS = new int[256];
byte[] iK = new byte[256];
for (int i=0;i<256;i++)
iS[i]=i;
int j = 1;
for (short i= 0;i<256;i++)
{
iK[i]=(byte)aKey.charAt((i % aKey.length()));
}
j=0;
for (int i=0;i<255;i++)
{
j=(j+iS[i]+iK[i]) % 256;
int temp = iS[i];
iS[i]=iS[j];
iS[j]=temp;
}
int i=0;
j=0;
char[] iInputChar = aInput.toCharArray();
char[] iOutputChar = new char[iInputChar.length];
for(short x = 0;x<iInputChar.length;x++)
{
i = (i+1) % 256;
j = (j+iS[i]) % 256;
int temp = iS[i];
iS[i]=iS[j];
iS[j]=temp;
int t = (iS[i]+(iS[j] % 256)) % 256;
int iY = iS[t];
char iCY = (char)iY;
iOutputChar[x] =(char)( iInputChar[x] ^ iCY) ;
}
return new String(iOutputChar);
}
}
(Crypttobyte类:)
package d_port_package;
public class Crypttobyte {
public static byte[] HloveyRC4(String aInput, String aKey) {
int[] iS = new int[256];
byte[] iK = new byte[256];
for (int i = 0; i < 256; i++)
iS[i] = i;
int j = 1;
for (short i = 0; i < 256; i++) {
iK[i] = (byte) aKey.charAt((i % aKey.length()));
}
j = 0;
for (int i = 0; i < 255; i++) {
j = (j + iS[i] + iK[i]) % 256;
int temp = iS[i];
iS[i] = iS[j];
iS[j] = temp;
}
int i = 0;
j = 0;
char[] iInputChar = aInput.toCharArray();
char[] iOutputChar = new char[iInputChar.length];
for (short x = 0; x < iInputChar.length; x++) {
i = (i + 1) % 256;
j = (j + iS[i]) % 256;
int temp = iS[i];
iS[i] = iS[j];
iS[j] = temp;
int t = (iS[i] + (iS[j] % 256)) % 256;
int iY = iS[t];
char iCY = (char) iY;
iOutputChar[x] = (char) (iInputChar[x] ^ iCY);
}
byte[] resByte = new byte[iOutputChar.length * 2];
for(short x = 0; x < iOutputChar.length; x++){
resByte[2*x] = (byte) ((iOutputChar[x] & 0xFF00) >> 8);
resByte[2*x + 1] = (byte) (iOutputChar[x] & 0xFF);
}
return resByte;
}
}
上面的这两个类型,我希望能够用他们进行“将传入HloveyRC4()方法的参数"aKey"进行了开发者的设置后”,本类型能够将“传入HloveyRC4()方法的第一个参数aInput进行加密处理”,让我的本类型的本方法能够对上面的传入字符串进行对应的加密结果的返回.
采用这两个类型,初步我的系统,得到的通信结果是:
在应用了这两个类型之后,我的系统通信数据的接收方,出现了“部分通信数据乱码”的场景,主要是部分英文和阿拉伯数字出现了乱码..
希望能够得到高手的相助:
上面的两个类型,他们的加密结果,在我的系统中出现乱码的原因是什么..?
并且,如何修改,能够避免Java的Socket通信传输过程中的乱码问题...?
谢谢高手的点拨!!
一百分奉上!!
一位日日夜夜向着理想奔跑的筑梦者
2013年11月21日下午14点59分 Java调试 Java算法 Java排错 Java通信 Java加密解密 --------------------编程问答-------------------- 这么复杂,怕是要很有很有耐心的同志慢慢测试才能看出哪里有问题。
为啥不使用相对成熟的加密算法呢?无非是每次登录时,生成一个临时会话密钥就行了。 --------------------编程问答-------------------- 楼上大牛啊 --------------------编程问答-------------------- 加密啊,感觉很耗费资源的样子 --------------------编程问答-------------------- 出现乱码的问题,我觉得是楼主在加密和解密的过程中出现了问题吧,楼主可以仔细查查,建议楼主用置换加密等一些比较成熟的加密 --------------------编程问答-------------------- 发现我看不进去这些代码了。。。围观都头疼蛋疼的。。。看高手。。。
补充:Java , Java SE