- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
public String XOR_Encrypt(String source, String key)
{
byte plain_text[] = new byte[source.length()];
plain_text = source.getBytes();
byte key_mas[] = new byte[key.length()];
key_mas = key.getBytes();
int key_len = key.length();
int crypt_pos = 0;
for(int i = 0; i < source.length(); i++)
{
plain_text[i] = (byte)(plain_text[i] ^ 0xaa);
plain_text[i] = (byte)(plain_text[i] ^ key_mas[crypt_pos]);
if(crypt_pos >= key_len - 1)
crypt_pos = 0;
else
crypt_pos++;
}
String EText = ByteToHexString(plain_text);
return EText;
}
public static String EncodeSimmetr(String s)
{
int MultKey = 62142;
int AddKey = 11719;
byte f1[] = new byte[s.length()];
byte f[] = new byte[s.length()];
f = s.getBytes();
for(int i = 0; i < s.length(); i++)
{
f1[i] = (byte)(f[i] ^ MultKey);
MultKey ^= AddKey;
}
s = new String(f1);
return s;
}
eth0 28.03.2012 20:00 # +3
Интересно, почему нельзя было сделать одной строкой.
dinisoft 28.03.2012 20:09 # 0
Мне больше интерестно: неужели для конторы с дневным оборотом в суммы с кучей знаков настолько накладно преобрести валидный сертификат и загнать трафик в https?
eth0 29.03.2012 13:25 # 0
Тогда, собственно, даже перехватывать логин-пароль не надо. Как сообщает копетан очевидность, если проксорить два шифротекста, ключи уйдут, а статистика останется, вроде как. Плюс, сразу же можно атаковать на известные вероятные фрагменты текста, через них восстановить части ключа. Шифрование для бедных и от идиотов, да.
istem 29.03.2012 15:55 # +2
dinisoft 29.03.2012 18:06 # 0
Lure Of Chaos 28.03.2012 21:42 # +1
3.14159265 29.03.2012 12:27 # +2
istem 29.03.2012 15:59 # +1
Потому что "0xaa" требуется периодически менять.
eth0 29.03.2012 20:00 # 0
istem 29.03.2012 23:08 # 0
wildscliss 05.04.2012 11:10 # 0
byte plain_text[] = new byte[source.length()];
plain_text = source.getBytes();
byte key_mas[] = new byte[key.length()];
key_mas = key.getBytes();
При том, что в описании String.getBytes() написано:
"Returns a new byte array containing the characters of this string..."
Ладно, допустим, я - параноик, не верю документации, и хочу, чтобы String XOR_Encrypt работала заведомо с _копиями_ текста и ключа, а не с оригиналами. Но тогда уж:
byte[] srcBytesArray=source.getBytes();
int bytesLength=srcBytesArray.length; // Кто сказал, что String.length()==String.getBytes().lengt h? А если у нас многобайтовая кодировка символов?
byte plain_text[] = new byte[bytesLength];
System.arraycopy(srcBytesArray,0,plain_t ext,0,bytesLength);
roman-kashitsyn 05.04.2012 11:21 # 0
Поэтому да, новые массивы байт создаются только для того, чтобы ссылка на них была сразу перетёрта результатом вызова getBytes.
guest8 09.04.2019 12:57 # −999