Что нового

Подскажите алгоритм для генерации строки на основе другой строки.

mitiya

Новичок
Сообщения
75
Репутация
0
Здравствуйте. Покажите плиз алгоритм.
вот например есть у меня строка 0d7dfto2cy (10 символов длинна, цифры и буквы)
И надо сгенерить другую строку на основе этой.

например что бы было типа newName("0d7dfto2cy") == "0dbpeizm8u"
и что бы всегда получалось одно и то же значение от конкретных входных данных.
типа как md5
_Crypt_HashData("0d7dfto2cy", $CALG_MD5) == 0x34AC4ADF7BE4A4B2102D36814BF829E4
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Что мешает взять любые 10 символов из хеша MD5? Например, всегда последние.

И вообще, непонятны цели. Можно вообще любой шифр подстановки (например, шифр Цезаря) применить, поставленную задачу это выполнит тоже. Да ещё и соответствие будет гарантированно взаимно однозначным.
 
Последнее редактирование:
Автор
M

mitiya

Новичок
Сообщения
75
Репутация
0
хэш это же HEX , там из букв только ABCDEF
На крайняк то в принципе можно. Но хотелось бы что-то более универсальное.
 

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
что-то более универсальное
Самое простое это
Код:
#include <Encoding.au3>
$sLine='0d7dfto2cy'
$sRes=_Encoding_Base64Encode($sLine)
MsgBox(4096,'Переменная $sRes',$sRes)
$sRes=StringToBinary($sLine)
MsgBox(4096,'Переменная $sRes',$sRes)
$sRes=StringToBinary($sLine,2)
MsgBox(4096,'Переменная $sRes',$sRes)
$sRes=StringToBinary($sLine,3)
MsgBox(4096,'Переменная $sRes',$sRes)
$sRes=StringToBinary($sLine,4)
MsgBox(4096,'Переменная $sRes',$sRes)

Если что-то более экзотическое, то кодируйте в Base 32, 58, 85, 91, 128 ...
Вот ряд ссылок
Код там "кривенький" (не работает с Unicode символами), но поправить можно...
Если в Base 32 менять строку символов, то получатся разные варианты:
Код:
$BASE32CHARS='ABCDEFGHIJKLMNOPQRSTUVWXYZ234567' ; - Base32
$BASE32CHARS='ybndrfg8ejkmcpqxot1uwisza345h769' ; - zBase32
$BASE32CHARS='0123456789ABCDEFGHJKMNPQRSTVWXYZ' ; - Base32 Crockford
$BASE32CHARS='0123456789ABCDEFGHIJKLMNOPQRSTUV' ; - Base32hex
$BASE32CHARS='0123456789bcdefghjkmnpqrstuvwxyz' ;  Base32 Geohash

или придумать свою последовательность из символов...
или XOR преобразование.. вариантов масса на эту тему: транслитерация, кодирование, шифрование, замещение и.т.д...
Код:
$sLine='0d7dfto2cy'
$sRes=_Xor_ED($sLine)
MsgBox(4096,'Переменная $sRes',$sRes)

Func _Xor_ED($sLine,$k=1)
  Local $aArray=StringToASCIIArray($sLine),$sText
  For $i=0 To UBound($aArray)-1
    $sText&=ChrW(BitXOR($aArray[$i],$k))
  Next
  Return $sText
EndFunc
 
Последнее редактирование:
Верх