Что нового

алгоритм шифрования

ahjkcfout7

Знающий
Сообщения
26
Репутация
6
написал некий алгоритм шифрования. смысл в том что строка разбивается посимвольно и конвертируется в ASCII-код и все заливается в массив и где генерируется в случайном порядке (меняются местами ячейки массива определеного столбца). к содержимому ячейки, тоесть к цифре, добавляется ASCII-код каждого символа ключа. в конце выводит текст+ключ. что бы расшифровать надо иметь два ключа. Если есть какие-то идеи как усложнить\усовершенствовать код...пишите
Код:
#include <array.au3>
Opt("MustDeclareVars",1)
Local $sString_first,$key,$UniqArray,$String
$sString_first = "АБВГДЕЖЗИЙКЛМНОПРСТУХФЦЧШЩЬЪЭЫЮЯабвгдежзийклмнопрстухфцчшщьъэыюяABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()_+-=""./\|{}[]<>;,:~`''"
$key = "12jkgujkgyjdyjdy3atrsytrustyi45"
$String = StringSplit($sString_first, "")
$key = StringSplit($key, "")
Dim $arrString[UBound($String)][6]
Dim $arrKey[UBound($key)][2]
For $i = 1 To UBound($String) - 1
	$arrString[$i][0] = Asc($String[$i]) ;число
Next
For $i = 1 To UBound($key) - 1
	$arrKey[$i][0] = Asc($key[$i]) ;ключ
Next

For $j = 1 To UBound($arrKey) - 1
	For $i = 1 To UBound($arrString) - 1
		$arrString[$i][1] += $arrString[$i][0] + $arrKey[$j][0]
	Next
Next

$UniqArray = _UniqArray(1, UBound($arrString) - 1) ; случайный порядок
Local $Rusult, $sequence_of_numbers
For $i = 1 To UBound($arrString) - 1
	$arrString[$i][2] = $UniqArray[$i - 1]
	$arrString[$i][3] = $arrString[$arrString[$i][2]][1]
	$arrString[$i][4] = ChrW($arrString[$i][3])
	$Rusult &= $arrString[$i][4]
	For $j = 1 To UBound($arrKey) - 1
		$arrString[$i][5] += $arrString[$i][2] + $arrKey[$j][0]
	Next
	$sequence_of_numbers &= $arrString[$i][5] & "^"
Next
MsgBox(4096,"title", $Rusult &@CR&$sequence_of_numbers)
;~ =================================================
;~ decrypt
Local $firs_key,$key,$second_key,$sString
$firs_key = "12jkgujkgyjdyjdy3atrsytrustyi45"
$second_key = $sequence_of_numbers
$String = $Rusult
$key = StringSplit($second_key, "^")
$sString = StringSplit($String, "")
$firs_key = StringSplit($firs_key, "")
Dim $arrKey[UBound($key) - 1][9]

For $i = 1 To UBound($firs_key) - 1
	$arrKey[$i][1] = Asc($firs_key[$i]) ;1-ключ
Next

For $i = 1 To UBound($arrKey) - 1
	$arrKey[$i][0] = $key[$i] ;2-ключ
Next
For $i = 1 To UBound($arrKey) - 1
	$arrKey[$i][3] = $arrKey[$i][0]
	For $j = 1 To UBound($arrKey) - 1
		$arrKey[$i][3] -= $arrKey[$j][1]
	Next
Next

For $i = 1 To UBound($arrKey) - 1
	$arrKey[$i][4] = AscW($sString[$i])
	$arrKey[$i][5] = $arrKey[$i][4]
Next

For $j = 1 To UBound($arrKey) - 1
	For $i = 1 To UBound($arrKey) - 1
		$arrKey[$i][5] -= $arrKey[$j][1]
	Next
Next
Local $Rusult1
For $i = 1 To UBound($arrKey) - 1
	$arrKey[$i][6] = Chr($arrKey[$i][5] / $firs_key[0])
	$arrKey[$arrKey[$i][3] / $firs_key[0]][7] = $arrKey[$i][6]
Next
For $i = 1 To UBound($arrKey) - 1
	$Rusult1 &= $arrKey[$i][7]
Next
ConsoleWrite(@CR & $sString_first & @CR & $Rusult1 & @CR)

Func _UniqArray($iMin, $iMax)
	Local $iR
	Local $iU = $iMax - $iMin, $iT = 0
	Local $aI[$iU + 1], $aO[$iU + 1]
	For $i = $iMin To $iMax
		$aI[$iT] = $i
		$iT += 1
	Next
	For $i = 0 To $iU
		$iR = Random(0, $iU - $i, 1)
		$aO[$i] = $aI[$iR]
		For $k = $iR To $iU - $i - 1
			$aI[$k] = $aI[$k + 1]
		Next
	Next
	Return SetError(0, 0, $aO)
EndFunc   ;==>_UniqArray
 
Верх