【发布时间】:2015-08-02 04:14:58
【问题描述】:
我有一个
String X = 0110100001100101011011000110110001101111530940929e959001f70dd4da5f5cc3b373165781
我首先通过 X.getBytes() 将字符串 X 变成一个字节 []; 我使用这个进行了 RC4 加密..
public static byte[] RC4(byte[] x,byte[] keyBytes)
{
byte[] e = null;
try
{
SecureRandom sr = new SecureRandom(keyBytes);
KeyGenerator kg = KeyGenerator.getInstance(algorithm);
kg.init(sr);
SecretKey sk = kg.generateKey();
Cipher enCipher = Cipher.getInstance("RC4");
enCipher.init(Cipher.ENCRYPT_MODE,sk);
e = enCipher.doFinal(plaintext);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return e;
}
编辑**
加密后我使用cipher = encrpyted.toString();
这将返回一个值cipher = [B@a1c582
之后我尝试使用 RC4 运行解密,并使用 toString 函数尝试取回上面列出的字符串 X 的原始值,但无济于事..
我做了什么.. 编辑**
//the reason i send using string is due to me having a client server architecture restriction on buffered writer, and this is the receiving side
message = stdIn.readLine();
System.out.println("Message received : " + message);
byte [] kc = key.getBytes();
byte [] decrypt = message.getBytes();
byte [] decryptC = EncryptionScheme.decrypt(decrypt, kc);
X = new String(decryptC);
System.out.println("String X = " + X);
Message received : [B@a1c582
String X = ����,��
有什么办法可以解决这个问题吗?我想取回String X = 0110100001100101011011000110110001101111530940929e959001f70dd4da5f5cc3b373165781的字符串
decryption algorithm
public static byte[] decrypt(byte[] ciphertext,byte[] keyBytes)
{
byte de[] = null;
try
{
SecureRandom sr = new SecureRandom(keyBytes);
KeyGenerator kg = KeyGenerator.getInstance(algorithm);
kg.init(sr);
SecretKey sk = kg.generateKey();
Cipher deCipher = Cipher.getInstance("RC4");
deCipher.init(Cipher.DECRYPT_MODE,sk);
de = deCipher.doFinal(ciphertext);
}
catch(Exception e)
{
e.printStackTrace();
}
return de;
}
【问题讨论】:
-
将其更改为
Arrays.toString(test)工作吗? -
System.out.println("test = " + new String(test));怎么样 -
“无济于事”不是问题描述。您在询问您尚未发布的代码的行为。
cipher = [B@a1c582和test = [B@dcb6b4是调用byte[].toString()的结果,而不是数组的内容。 -
@DavidEhrmann 不,它没有。与 abv 相同,请阅读我的编辑。谢谢!
-
我指的是
EncryptionScheme.decrypt()。没有那个源代码就不可能回答这个问题。但是,您的问题可能是由于将密文作为字符串发送。String不是二进制数据的容器。您需要对其进行 base64 编码,或对其进行十六进制编码等。这也可能是由于发送[B@a1c582而不是数组内容。此处引用和暗示的代码太多尚未发布。在这种情况下,您不会接受客户的问题报告。
标签: java string encryption bytearray rc4-cipher