【发布时间】:2014-08-15 09:40:37
【问题描述】:
基本上我可以为Strings 成功实现RC4 算法,它为key 采用Byte[] 数组:
byte [] key = "AAAAA".getBytes("ASCII");
如果我将 clearText 作为 String 说“24”,那么密文范围非常高,比如 > 2000 。 但是对于我的算法,我需要将其限制在较小的范围内 ~200。
那么我可以为int 提供更好的选择吗?
这就是我对字符串所做的:
加密模式:
byte [] key = "AAAAA".getBytes("ASCII");
String clearText = "66";
Cipher rc4 = Cipher.getInstance("RC4");
SecretKeySpec rc4Key = new SecretKeySpec(key, "RC4");
rc4.init(Cipher.ENCRYPT_MODE, rc4Key);
byte [] cipherText = rc4.update(clearText.getBytes("ASCII"));
检查值:
System.out.println("clear (ascii) " + clearText);
System.out.println("clear (hex) " + DatatypeConverter.printHexBinary(clearText.getBytes("ASCII")));
System.out.println("cipher (hex) is " + DatatypeConverter.printHexBinary(cipherText));
- 可以对这些 类型执行任何技巧来获得较低的int 值吗?
解密:
Cipher rc4Decrypt = Cipher.getInstance("RC4");
rc4Decrypt.init(Cipher.DECRYPT_MODE, rc4Key);
byte [] clearText2 = rc4Decrypt.update(cipherText);
SSCCE:
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
public class MyArcFour
{
public static void main(String args[])throws Exception
{
byte [] key = "AAAAA".getBytes("ASCII");
String clearText = "66";
Cipher rc4 = Cipher.getInstance("RC4");
SecretKeySpec rc4Key = new SecretKeySpec(key, "RC4");
rc4.init(Cipher.ENCRYPT_MODE, rc4Key);
byte [] cipherText = rc4.update(clearText.getBytes("ASCII"));
System.out.println("clear (ascii) " + clearText);
System.out.println("clear (hex) " + DatatypeConverter.printHexBinary(clearText.getBytes("ASCII")));
System.out.println("cipher (hex) is " + DatatypeConverter.printHexBinary(cipherText));
Cipher rc4Decrypt = Cipher.getInstance("RC4");
rc4Decrypt.init(Cipher.DECRYPT_MODE, rc4Key);
byte [] clearText2 = rc4Decrypt.update(cipherText);
System.out.println("decrypted (clear) is " + new String(clearText2, "ASCII"));
}
}
【问题讨论】:
-
"那么密文范围很大,比如说>2000"这是什么意思?
-
@Duncan 我在加密后得到的结果字符串,如果你将它解析为 int,则很高
标签: java encryption rc4-cipher