Простенько закриптовать число от 0 до 100.000
-
Гость
Простенько закриптовать число от 0 до 100.000
Так, чтобы получилось другое число, и из него можно было легко получить первоначальное. Легко - значит без долгих вычислений, но сам алгоритм не должен легко угадываться. Причем каждому числу от 0 до 100.000 должно соответствовать несколько чисел (чем больше, тем лучше). Чтобы результат криптования для одного и того же числа не слишком часто повторялся, в этом весь смысл.
Хинтергрунд: хочу спрятать Id, передаваемый в URL браузера. Чтобы не так легко было получить копию базы данных путем последовательного просмотра всех страниц и интерпретации ссылок, в которых этот Id присутствует.
Хинтергрунд: хочу спрятать Id, передаваемый в URL браузера. Чтобы не так легко было получить копию базы данных путем последовательного просмотра всех страниц и интерпретации ссылок, в которых этот Id присутствует.
-
Гость
Re: Простенько закриптовать число от 0 до 100.000
/// <summary>
/// Gibt einen MD5 Hash als String zurück
/// </summary>
/// <param name="TextToHash">string der Gehasht werden soll.</param>
/// <returns>Hash als string.</returns>
public static string GetMD5Hash(string TextToHash)
{
//Prüfen ob Daten übergeben wurden.
if((TextToHash == null) || (TextToHash.Length == 0))
{
return string.Empty;
}
//MD5 Hash aus dem String berechnen. Dazu muss der string in ein Byte[]
//zerlegt werden. Danach muss das Resultat wieder zurück in ein string.
MD5 md5 = new MD5CryptoServiceProvider();
byte[] textToHash = Encoding.Default.GetBytes (TextToHash);
byte[] result = md5.ComputeHash(textToHash);
return System.BitConverter.ToString(result);
}
/// Gibt einen MD5 Hash als String zurück
/// </summary>
/// <param name="TextToHash">string der Gehasht werden soll.</param>
/// <returns>Hash als string.</returns>
public static string GetMD5Hash(string TextToHash)
{
//Prüfen ob Daten übergeben wurden.
if((TextToHash == null) || (TextToHash.Length == 0))
{
return string.Empty;
}
//MD5 Hash aus dem String berechnen. Dazu muss der string in ein Byte[]
//zerlegt werden. Danach muss das Resultat wieder zurück in ein string.
MD5 md5 = new MD5CryptoServiceProvider();
byte[] textToHash = Encoding.Default.GetBytes (TextToHash);
byte[] result = md5.ComputeHash(textToHash);
return System.BitConverter.ToString(result);
}
-
Гость
Re: Простенько закриптовать число от 0 до 100.000
спасибо. действительно, можно преобразовывать в строку, необязательно в другое число.Гость писал(а):/// <summary>
/// Gibt einen MD5 Hash als String zurück
/// </summary>
/// <param name="TextToHash">string der Gehasht werden soll.</param>
/// <returns>Hash als string.</returns>
public static string GetMD5Hash(string TextToHash)
{
//Prüfen ob Daten übergeben wurden.
if((TextToHash == null) || (TextToHash.Length == 0))
{
return string.Empty;
}
//MD5 Hash aus dem String berechnen. Dazu muss der string in ein Byte[]
//zerlegt werden. Danach muss das Resultat wieder zurück in ein string.
MD5 md5 = new MD5CryptoServiceProvider();
byte[] textToHash = Encoding.Default.GetBytes (TextToHash);
byte[] result = md5.ComputeHash(textToHash);
return System.BitConverter.ToString(result);
}
а хэш сложно считается?
может, есть что попроще. мне супернадежность не нужна, но нужна быстрота. ибо php не быстр, а ссылок на одной странице могут быть сотни, и каждую надо закриптовать. а вот раскриптовать - это менее критично, так как только один раз на страницу надо.
-
Гость
Re: Простенько закриптовать число от 0 до 100.000
ну так попробуй, насколько быстро, в чём проблема -то? или сам функцию напиши, которая кодирует или декодирует
модераторы, перенесите топик из жизни, пехапэ "красивой жизнью" не назовёшь ))
модераторы, перенесите топик из жизни, пехапэ "красивой жизнью" не назовёшь ))
Re: Простенько закриптовать число от 0 до 100.000
ничего не понимаю, хеширование MD5 например тут точно не пойдет так как хеширование всегда имеет коллизии (одинаковое значение хеша для разных ИД).Гость писал(а):/// <summary>
/// Gibt einen MD5 Hash als String zurück
/// </summary>
}
А ТС надо иметь однозначное восстановление из F(ID) само ID.
Я бы просто использовал битовую арифметику:
например умножал на 4 риверсировал биты и вставлял "K" (K= 0,1,2,3) нулей между изначальными битами а в конце записывал само "K"
Re: Простенько закриптовать число от 0 до 100.000
ну может, я тоже об этом кстати подумал, но с другой стороны тогда нет множественности для F(ID) , правда ее конечно легко можно и добавитьВован Водкин писал(а):для чисел от 0 до 100000 точно подойдетminimax писал(а):ничего не понимаю, хеширование MD5 например тут точно не пойдет так как хеширование всегда имеет коллизии (одинаковое значение хеша для разных ИД).Гость писал(а):/// <summary>
/// Gibt einen MD5 Hash als String zurück
/// </summary>
}
А ТС надо иметь однозначное восстановление из F(ID) само ID.хеш можно посчитать только один раз, но хранить в соседнем столбце и конвертировать в айди в подзапросеКод: Выделить всё
flux@xubuntu:~$ for i in {0..100000}; do echo "$i"|md5sum >>/tmp/md5.txt; [ "0" = $(( i%100 )) ] && echo "$i"; done sort /tmp/md5.txt | uniq -d
-
Гость
Re: Простенько закриптовать число от 0 до 100.000
во, правильное направление. коллизий точно не будет. вот только если множественность обеспечивать засчет K, то при K=10 числа слишком большие получатся. а было бы хорошо хотя бы 10 значений для каждого Id иметь.minimax писал(а):ничего не понимаю, хеширование MD5 например тут точно не пойдет так как хеширование всегда имеет коллизии (одинаковое значение хеша для разных ИД).Гость писал(а):/// <summary>
/// Gibt einen MD5 Hash als String zurück
/// </summary>
}
А ТС надо иметь однозначное восстановление из F(ID) само ID.
Я бы просто использовал битовую арифметику:
например умножал на 4 риверсировал биты и вставлял "K" (K= 0,1,2,3) нулей между изначальными битами а в конце записывал само "K"
-
Гость
Re: Простенько закриптовать число от 0 до 100.000
само значение Id - это не пароль, и тайной не является. нужна именно множественность, чтобы затруднить написание программы, которая бы парсила страницы и создавала копию моей базы, пользуясь Id в ссылках.Вован Водкин писал(а): хеш можно посчитать только один раз, но хранить в соседнем столбце и конвертировать в айди в подзапросе
ну например, умножаем Id на 10 и прибавляем случайное число от 0 до 9. но это слишком примитивно.
-
Гость
Re: Простенько закриптовать число от 0 до 100.000
а на чем сейчас сайты принято клепать?Гость писал(а): модераторы, перенесите топик из жизни, пехапэ "красивой жизнью" не назовёшь ))
Re: Простенько закриптовать число от 0 до 100.000
так оно и обеспечивается к - случайное из диапазона 0,1,2,3 больше нельзя так как умножение на 4 дает тебе только 2 бита = числа 0,1,2,3.Гость писал(а):во, правильное направление. коллизий точно не будет. вот только если множественность обеспечивать засчет K, то при K=10 числа слишком большие получатся. а было бы хорошо хотя бы 10 значений для каждого Id иметь.minimax писал(а):ничего не понимаю, хеширование MD5 например тут точно не пойдет так как хеширование всегда имеет коллизии (одинаковое значение хеша для разных ИД).Гость писал(а):/// <summary>
/// Gibt einen MD5 Hash als String zurück
/// </summary>
}
А ТС надо иметь однозначное восстановление из F(ID) само ID.
Я бы просто использовал битовую арифметику:
например умножал на 4 риверсировал биты и вставлял "K" (K= 0,1,2,3) нулей между изначальными битами а в конце записывал само "K"
Как получить случайное знаешь?