По сути, я могу успешно реализовать алгоритм RC4
для String
s, который принимает массив Byte[]
для key
:
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"));
}
}