Кодирование и раскодирование паролейDelphi , Синтаксис , ШифрованиеКодирование и раскодирование паролей
Оформил: DeeCo // This example shows how you can encrypt strings // using special security string. // You can decode data only if you know security string. // I suppose, there is no chance to hack security string, using any analyse algorythms. // Every time you call this function, you will // have a new result even if all params are constant // NOTE: Don`t forget to call "Randomize" proc before using this functions. const Codes64 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/'; // you must use this function to generate special // security string, which is used in main encode/decode routines. // NOTE: you must generate the security string only once and then use it in encode/decode functions. function GeneratePWDSecutityString: string; var i, x: integer; s1, s2: string; begin s1 := Codes64; s2 := ''; for i := 0 to 15 do begin x := Random(Length(s1)); x := Length(s1) - x; s2 := s2 + s1[x]; s1 := Copy(s1, 1,x - 1) + Copy(s1, x + 1,Length(s1)); end; Result := s2; end; // this function generate random string using // any characters from "CHARS" string and length // of "COUNT" - it will be used in encode routine // to add "noise" into your encoded data. function MakeRNDString(Chars: string; Count: Integer): string; var i, x: integer; begin Result := ''; for i := 0 to Count - 1 do begin x := Length(chars) - Random(Length(chars)); Result := Result + chars[x]; chars := Copy(chars, 1,x - 1) + Copy(chars, x + 1,Length(chars)); end; end; // This will encode your data. // "SecurityString" must be generated using method // described above, and then stored anywhere to // use it in Decode function. // "Data" is your string (you can use any characters here) // "MinV" - minimum quantity of "noise" chars before each encoded data char. // "MaxV" - maximum quantity of "noise" chars before each encoded data char. function EncodePWDEx(Data, SecurityString: string; MinV: Integer = 0; MaxV: Integer = 5): string; var i, x: integer; s1, s2, ss: string; begin if minV > MaxV then begin i := minv; minv := maxv; maxv := i; end; if MinV < 0 then MinV := 0; if MaxV > 100 then MaxV := 100; Result := ''; if Length(SecurityString) < 16 then Exit; for i := 1 to Length(SecurityString) do begin s1 := Copy(SecurityString, i + 1,Length(securitystring)); if Pos(SecurityString[i], s1) > 0 then Exit; if Pos(SecurityString[i], Codes64) <= 0 then Exit; end; s1 := Codes64; s2 := ''; for i := 1 to Length(SecurityString) do begin x := Pos(SecurityString[i], s1); if x > 0 then s1 := Copy(s1, 1,x - 1) + Copy(s1, x + 1,Length(s1)); end; ss := securitystring; for i := 1 to Length(Data) do begin s2 := s2 + ss[Ord(Data[i]) mod 16 + 1]; ss := Copy(ss, Length(ss), 1) + Copy(ss, 1,Length(ss) - 1); s2 := s2 + ss[Ord(Data[i]) div 16 + 1]; ss := Copy(ss, Length(ss), 1) + Copy(ss, 1,Length(ss) - 1); end; Result := MakeRNDString(s1, Random(MaxV - MinV) + minV + 1); for i := 1 to Length(s2) do Result := Result + s2[i] + MakeRNDString(s1, Random(MaxV - MinV) + minV); end; // This will decode your data, encoded with the function above, using specified "SecurityString". function DecodePWDEx(Data, SecurityString: string): string; var i, x, x2: integer; s1, s2, ss: string; begin Result := #1; if Length(SecurityString) < 16 then Exit; for i := 1 to Length(SecurityString) do begin s1 := Copy(SecurityString, i + 1,Length(securitystring)); if Pos(SecurityString[i], s1) > 0 then Exit; if Pos(SecurityString[i], Codes64) <= 0 then Exit; end; s1 := Codes64; s2 := ''; ss := securitystring; for i := 1 to Length(Data) do if Pos(Data[i], ss) > 0 then s2 := s2 + Data[i]; Data := s2; s2 := ''; if Length(Data) mod 2 <> 0 then Exit; for i := 0 to Length(Data) div 2 - 1 do begin x := Pos(Data[i * 2 + 1], ss) - 1; if x < 0 then Exit; ss := Copy(ss, Length(ss), 1) + Copy(ss, 1,Length(ss) - 1); x2 := Pos(Data[i * 2 + 2], ss) - 1; if x2 < 0 then Exit; x := x + x2 * 16; s2 := s2 + chr(x); ss := Copy(ss, Length(ss), 1) + Copy(ss, 1,Length(ss) - 1); end; Result := s2; end; Программный код на Delphi, который реализует шифрование и дешифрование паролей с помощью custom-алгоритма. Вот подробное описание кода: GeneratePWDSecurityString
Функция генерирует строку безопасности, которая используется для шифрования и дешифрования паролей. Строка создается путем случайного перемешивания символов из константной строки MakeRNDString
Функция генерирует случайную строку с помощью предоставленной строки EncodePWDEx
Функция шифрует пароль с помощью строки безопасности, генерированной ранее. Шифрование происходит следующим образом:
1. Генерируется случайная строка шума с помощью функции DecodePWDEx
Функция дешифровывает пароль, зашифрованный с помощью функции Код использует некоторые ограничения и workaround для предотвращения потенциальных атак, такие как:
* Убеждение в том, что минимальное количество символов шума ( Однако стоит отметить, что это реализация имеет некоторые ограничения и может не быть пригодной для использования в производственной среде. Например: * Используемый алгоритм относительно прост и может быть легко взломан с помощью анализа частот или других атак. * Шифрование не защищено от атак на выбранное открытое текст (CPA). * Нет проверки целостности для предотвращения манипуляции зашифрованными данными. В целом рекомендуется использоватьestablished криптографические алгоритмы и библиотеки для шифрования и дешифрования паролей, такие как AES или PBKDF2. Кодирование и раскодирование паролей: пример реализации алгоритма шифрования и дешифрования строковых данных с использованием специального безопасности строки. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Шифрование ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |