Что нового

_RSA_crypt - Шифрование по алгоритму RSA

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
AutoIt: 3.3.6.1+
Версия: 1.1

Категория: Кодирование / Шифрование

Описание: Упрощенный, но довольно надежный вариант шифрования по алгоритму RSA.
Библиотека предназначена для шифрования (расшифровки) текста при передаче по любым открытым каналам приватных данных с определенной гарантией того, что прочитает их только тот, для кого они предназначены. Для шифрования (расшифровки) генерируются {E,N} - открытый ключ(public key) и {D,N} - секретный ключ(private key). Открытый ключ передается всем, с кем будет поддерживаться связь, секретный ключ знает только его владелец. Текст, зашифрованный открытым ключом, можно расшифровать только закрытым ключом, и наоборот.

Пример:
Код:
#cs
	Пример генерации ключей, шифрования и расшифровки текста по открытому или закрытому ключу.
	Ключи, тексты для шифрования, зашифрованные тексты и расшифрованные тексты можно будет посмотреть в файлах Key.txt, Str.txt, EnCr.txt и DeCr.txt в папке с этим скриптом.
#ce
#include '_RSA_crypt.au3'
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPIEx.au3>
#include <ComboConstants.au3>

Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1)

Global $aInput[3] = ['Модуль N', 'Откр.эксп. E', 'Секр.эксп. D'], $sText = 'Текст, ', _
		$aCheckTextCrypt[2] = ['открытым ключом', 'секретным ключом'], $nCheckboxCrypt, _
		$aEdit[3] = ['Текст для шифрования:'], $aLabel[2], $aCrypt[2] = ['зашифрованный ', _
		'расшифрованный '], $aButton[3] = ['Генерировать ключи', 'Зашифровать текст', _
		'Расшифровать текст'], $aKey, $sString, $sEnCrypt, $sCrypt = 'Шифровать ', $iKey, _
		$nCheckboxType, $aCheckTextType[2] = ['Шифр.текст в строковом виде', 'Шифр.текст в бинарном виде'], _
		$iBin, $nComboBoxNumE, $nButtonReset, $hFile, $aFiles[4] = ['Str.txt', 'EnCr.txt', 'DeCr.txt', 'Key.txt']

GUICreate('_RSA_crypt GUI', 310, 480, -1, -1, -1, $WS_EX_TOPMOST)
$nCheckboxCrypt = GUICtrlCreateCheckbox($sCrypt & $aCheckTextCrypt[0], 10, 17, 180, 20)
$nCheckboxType = GUICtrlCreateCheckbox($aCheckTextType[0], 10, 45, 180, 20)
GUICtrlCreateLabel('Кол-во знаков в E', 195, 2, 110, 15, $SS_CENTER)
$nComboBoxNumE = GUICtrlCreateCombo('', 215, 17, 70, 20, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, '-1|3|4|5|6|7|8', '-1')
$nButtonReset = GUICtrlCreateButton('Сброс', 215, 42, 70, 25)
GUICtrlSetCursor(-1, 0)
FileDelete(@ScriptDir & '\' & $aFiles[3])
For $i = 0 To 2
	FileDelete(@ScriptDir & '\' & $aFiles[$i])
	GUICtrlCreateLabel($aInput[$i], 10 + 100 * $i, 75, 90, 15, $SS_CENTER)
	$aInput[$i] = GUICtrlCreateInput('', 10 + 100 * $i, 90, 90, 20, BitOR($ES_READONLY, $ES_CENTER))
	If $i Then
		$aLabel[$i - 1] = GUICtrlCreateLabel($sText & $aCrypt[$i - 1] & $aCheckTextCrypt[$i - 1] & ':', _
				10, 135 + 100 * $i, 290, 15, $SS_CENTER)
	Else
		GUICtrlCreateLabel($aEdit[$i], 10, 135 + 100 * $i, 290, 15, $SS_CENTER)
	EndIf
	$aEdit[$i] = GUICtrlCreateEdit('', 10, 150 + 100 * $i, 290, 75)
	$aButton[$i] = GUICtrlCreateButton($aButton[$i], 10 + 100 * $i, 435, 90, 35, $BS_MULTILINE)
	GUICtrlSetCursor(-1, 0)
Next
GUICtrlCreateLabel('({E,N} - открытый ключ, {D,N} - секретный ключ)', 10, 113, 260, 16, $SS_CENTER)
GUICtrlSetStyle($aEdit[1], BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY))
GUISetState()
_WinAPI_EmptyWorkingSet()
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nCheckboxCrypt
			$iKey = BitAND(GUICtrlRead($nCheckboxCrypt), $GUI_CHECKED)
			GUICtrlSetData($nCheckboxCrypt, $sCrypt & $aCheckTextCrypt[$iKey])
			For $i = 0 To 1
				If $iKey Then
					GUICtrlSetData($aLabel[$i], $sText & $aCrypt[$i] & $aCheckTextCrypt[Not $i] & ':')
				Else
					GUICtrlSetData($aLabel[$i], $sText & $aCrypt[$i] & $aCheckTextCrypt[$i] & ':')
				EndIf
				GUICtrlSetData($aEdit[$i + 1], '')
			Next
		Case $nCheckboxType
			$iBin = BitAND(GUICtrlRead($nCheckboxType), $GUI_CHECKED)
			GUICtrlSetData($nCheckboxType, $aCheckTextType[$iBin])
			For $i = 1 To 2
				GUICtrlSetData($aEdit[$i], '')
			Next
		Case $aButton[0]
			$aKey = _RSA_GenerateKeys(GUICtrlRead($nComboBoxNumE))
			For $i = 0 To 2
				GUICtrlSetData($aInput[$i], $aKey[$i])
				If $i Then
					GUICtrlSetData($aEdit[$i], '')
				EndIf
			Next
			$hFile = FileOpen(@ScriptDir & '\' & $aFiles[3], 1)
			FileWrite($hFile, 'Открытый ключ {E,N}: {' & $aKey[1] & ',' & $aKey[0] & '}' & @CRLF & _
					'Секретный ключ {D,N}: {' & $aKey[2] & ',' & $aKey[0] & '}' & @CRLF & _
					'~+~+~+~+~+~+~+~+~+~+~+~+~+' & @CRLF)
			FileClose($hFile)
		Case $aButton[1]
			If Not IsArray($aKey) Then ContinueLoop
			$sString = GUICtrlRead($aEdit[0])
			If Not $sString Then ContinueLoop
			$sEnCrypt = _RSA_EnCrypt($sString, $aKey[1 + $iKey], $aKey[0], -1, $iBin)
			GUICtrlSetData($aEdit[1], $sEnCrypt)
			$hFile = FileOpen(@ScriptDir & '\' & $aFiles[0], 1)
			FileWrite($hFile, $sString & @CRLF & '~+~+~+~+~+~+~+~+~+~+~+~+~+' & @CRLF)
			FileClose($hFile)
			$hFile = FileOpen(@ScriptDir & '\' & $aFiles[1], 1)
			FileWrite($hFile, $sEnCrypt & @CRLF & '~+~+~+~+~+~+~+~+~+~+~+~+~+' & @CRLF)
			FileClose($hFile)
			$sString = ''
			$sEnCrypt = ''
		Case $aButton[2]
			If Not IsArray($aKey) Then ContinueLoop
			$sEnCrypt = GUICtrlRead($aEdit[1])
			If $iBin Then $sEnCrypt = Binary($sEnCrypt)
			If Not $sEnCrypt Then ContinueLoop
			$sString = _RSA_DeCrypt($sEnCrypt, $aKey[2 - $iKey], $aKey[0])
			GUICtrlSetData($aEdit[2], $sString)
			$hFile = FileOpen(@ScriptDir & '\' & $aFiles[2], 1)
			FileWrite($hFile, $sString & @CRLF & '~+~+~+~+~+~+~+~+~+~+~+~+~+' & @CRLF)
			FileClose($hFile)
			$sString = ''
			$sEnCrypt = ''
		Case $nButtonReset
			For $i = 0 To 2
				GUICtrlSetData($aInput[$i], '')
				GUICtrlSetData($aEdit[$i], '')
			Next
			$aKey = 0
	EndSwitch
WEnd

Файл: _RSA_crypt.7z Ко всем функциям есть подробные примеры с комментариями


Источник: Шифрование по алгоритму RSA
Автор: madmasles
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: Шифрование по алгоритму RSA

madmasles
IMHO нужно оформить функции в UDF, к примеру, SimpleRSAEncryption.au3.

P.S. С почином :beer:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Шифрование по алгоритму RSA

ИМХО было бы намного круче если бы в место непонятных:
Код:
$i_PublicKey
$i_PrivateKey
$i_Modul
$i_FirstNum
$i_SecondNum

Были бы общепринятые обозначение $E $D $N $P $Q и тд и тп, иначе если сверяться с мануалом, человек начинает путаться. И для новичков пояснение, как используя эту UDF, соединить 2 скрипта вместе, какие ключи вшивать в ехе, а какие выкатывать наружу и тд и тп.



Добавлено:
Сообщение автоматически объединено:

Например код отсюда: http://www.autoitscript.com/forum/topic/95363-rsa-algorithm/page__p__686569__hl__rsa%20algorithm__fromsearch__1#entry686569
Прекрасно работает, не перегружен переменными и при этом читаем и понятен для освоения.

И зачем тут используются файлы для хранения ключей?
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Re: Шифрование по алгоритму RSA

Belfigor,
Про существования алгоритма RSA я узнал пару дней назад из Вашего сообщения. Пока разбирался, что это такое, переменные назвал так, чтобы мне было понятно, а потом так их и оставил.
Тему по Вашей ссылке на оф. форуме не видел. В ней алгоритм реализован гораздо лучше, чем у меня. Так что, ИМХО, единственная польза от этой темы это Ваша ссылка на оф. форум. :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: Шифрование по алгоритму RSA

madmasles [?]
Так что, ИМХО, единственная польза от этой темы это Ваша ссылка на оф. форум
Ну почему же. Вы доработайте свою UDF и выложите. IMHO должен быть выбор!
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Полностью переписал все функции, оформил их в виде библиотеки, добавил примеры ко всем функциям. Теперь генерация ключей, зашифровка(расшифрование) происходит значительно быстрее и надежнее. (Частично использовались чужие наработки. Ссылки на них есть в библиотеке.)
Ссылка на файлы в первом посте.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Никоим образом не ставлю под сомнение грамотность написанного кода.
Просто хочу удовлетворить своё любопытсво в научном аспекте:
По какому алгоритму идёт проверка чисел на простоту при генерации ключей?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Сейчас не могу - у меня закачка файлов из итернета закрыта. Дома смогу. А любопытство здесь и сейчас...
;)
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
C2H5OH [?]
По какому алгоритму идёт проверка чисел на простоту
:smile:
Код:
For $j = 99 To 1001 Step 2
	$sString = ''
	For $i = 1 To $j
		$sString &= 1
	Next
	If Not StringRegExp($sString, '^1?$|^(11+?)\1+$') Then
		ConsoleWrite($j & @TAB & 'простое число' & @LF)
	EndIf
Next
Источник
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
Func _RSA_Generate_Prime($i_Len = -1)
	Local $i_Prime, $i_Max, $a_End[4] = [1, 3, 7, 9]

	$i_Len = Int($i_Len)
	If $i_Len = -1 Or $i_Len = Default Or Not $i_Len Then $i_Len = Random(2, 8, 1)
	If $i_Len < 2 Then $i_Len = 2
	If $i_Len > 12 Then $i_Len = 12
	For $i = 1 To $i_Len
		$i_Max &= 9
	Next
	While 1
		$i_Prime = Random(1, 9, 1)
		If $i_Len > 2 Then
			For $i = 1 To $i_Len - 2
				$i_Prime &= Random(0, 9, 1)
			Next
		EndIf
		$i_Prime &= $a_End[Random(0, 3, 1)]
		While 1
			If _RSA_IsPrime($i_Prime) Then ExitLoop 2
			$i_Prime += 2
			If $i_Prime >= $i_Max Then ExitLoop
		WEnd
	WEnd
	Return $i_Prime
EndFunc   ;==>_RSA_Generate_Prime


Это шутка была???


http://ru.wikipedia.org/wiki/RSA
На 2009 год система шифрования на основе RSA считается надёжной, начиная с размера в 1024 бита.
Группе учёных из Швейцарии, Японии, Франции, Нидерландов, Германии и США удалось успешно вычислить данные, зашифрованные при помощи криптографического ключа стандарта RSA длиной 768 бит. По словам исследователей, после их работы в качестве надежной системы шифрования можно рассматривать только RSA-ключи длиной 1024 бита и более. Причём от шифрования ключом длиной в 1024 бит стоит отказаться в ближайшие три-четыре года.
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
C2H5OH [?]
Цитата
На 2009 год система шифрования на основе RSA считается надёжной, начиная с размера в 1024 бита...
Если Вы будете зашифровывать пароль от ядерной кнопки, то Вам _RSA_crypt, конечно, не подойдет, эта библиотека для чего-нибудь менее важного (например, телефона любовницы, чтобы жена не узнала). ;D
Это шутка была???
В моем посте есть ссылка на источник. Работает же, для небольших чисел довольно быстро.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
:'(
Я то думал что всё серьёзно.
Только хотел поговорить об эллиптических кривых, о полях Галуа, об аддитивных цепочках...
А тут большими числами и не пахнет. :'( :'( :'(


Добавлено:
Сообщение автоматически объединено:

Для менее важного есть DES например.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
RSA - алгоритм динамического шифрования. Шифровать что-то у себя на компьютере с помощью этого алгоритма - не оправданная задача. Этот алгоритм удобно использоваться для защищенного соединения клиент-сервер через интернет. Суть его в том, что расшифровать можно только одно конкретное сообщение, время на расшифровку и подделку сообщения уйдет больше чем понадобится для того чтобы приложение поняло что сессия не действительна. При длине ключа 2048 бит кластер современных супер компьютеров будет расшифровывать сообщение несколько сотен лет, и это одно единственное сообщение, следющее сообщение расшифровывать придется по новой. Это алгоритм "одного сообщения" или "одной сессии", очень чудная и криптостойкая штука рассчитанная на то что что зашифрованное сообщение будет получено другой стороной в течении ближайших пары секунд. У меня например оно работает так и мне хватает коротенького ключа . И даже с самым коротким ключем, сообщение можно зашифровать 2 раза подряд и только потом отправить на расшифровку, мне вполне хватает ключей длинной 11 знаков.
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Belfigor,
С короткими открытыми ключами можно еще так сделать.
Код:
Opt('MustDeclareVars', 1)

Global $iN, $iE, $sDecToHexN, $sDecToHexE, $sHex2ToDecN, $sHex2ToDecE


For $i = 1 To 10
	$iN = Int(Random() * 10 ^ Random(3, 7, 1))
	$iE = Int(Random() * 10 ^ Random(3, 7, 1))

	$sDecToHexN = _RSA_DecToHex($iN)
	$sDecToHexE = _RSA_DecToHex($iE)
	$sHex2ToDecN = _RSA_HexToDec($sDecToHexN)
	$sHex2ToDecE = _RSA_HexToDec($sDecToHexE)

	If $sHex2ToDecN <> $iN Then
		ConsoleWrite('N error' & @LF)
	Else
		ConsoleWrite('N: ' & $iN & '; DecToHexN: ' & $sDecToHexN & '; Hex2ToDecN: ' & $sHex2ToDecN & _
				'; Native Dec: ' & Dec($sDecToHexN) & @LF)
	EndIf
	If $sHex2ToDecE <> $iE Then
		ConsoleWrite('E error' & @LF)
	Else
		ConsoleWrite('E: ' & $iE & '; DecToHexE: ' & $sDecToHexE & '; Hex2ToDecE: ' & $sHex2ToDecE & _
				'; Native Dec: ' & Dec($sDecToHexE) & @LF)
	EndIf
	ConsoleWrite('---' & @LF)
Next

Func _RSA_DecToHex($i_Num)
	Local $a_Num, $s_Return, $s_End, $j
	If Not StringIsDigit($i_Num) Then Return SetError(1, '', 0)
	If Mod(StringLen($i_Num), 2) Then $s_End = Hex(Int(StringRight($i_Num, 1) + 246), 2)
	$a_Num = StringRegExp($i_Num, '\d{2}', 3)
	For $i = 0 To UBound($a_Num) - 1
		$s_Return &= Hex(Int($a_Num[$i] + $j), 2)
		$j += 1
		If $j = 100 Then $j = 0
	Next
	Return $s_Return & $s_End
EndFunc   ;==>_RSA_DecToHex

Func _RSA_HexToDec($s_Num)
	Local $a_Num, $i_Temp, $i_Return, $j
	If StringRegExp($s_Num, '(?i)[^\da-f]') Then Return SetError(1, '', 0)
	$a_Num = StringRegExp($s_Num, '.{2}', 3)
	For $i = 0 To UBound($a_Num) - 1
		$i_Temp = Dec($a_Num[$i])
		If $i_Temp > 200 Then
			$i_Temp -= 246
		Else
			$i_Temp -= $j
			If $i_Temp < 10 Then $i_Temp = '0' & $i_Temp
		EndIf
		$i_Return &= $i_Temp
		$j += 1
		If $j = 100 Then $j = 0
	Next
	Return $i_Return
EndFunc   ;==>_RSA_HexToDec
Или так.
Код:
Opt('MustDeclareVars', 1)

Global $iN, $iE, $sDecToHexN, $sDecToHexE, $sHex2ToDecN, $sHex2ToDecE

For $i = 1 To 6
	;$iN = Int(Random() * 10 ^ Random(2, 6, 1)) & 9
	;$iE = Int(Random() * 10 ^ Random(2, 6, 1)) & 9
	$iN &= 9
	$iE &= 9
	$sDecToHexN = _RSA_DecToHex($iN)
	$sDecToHexE = _RSA_DecToHex($iE)
	$sHex2ToDecN = _RSA_HexToDec($sDecToHexN)
	$sHex2ToDecE = _RSA_HexToDec($sDecToHexE)
	If $sHex2ToDecN <> $iN Then
		ConsoleWrite('N error' & @LF)
	Else
		ConsoleWrite('N: ' & $iN & '; DecToHexN: ' & $sDecToHexN & '; HexToDecN: ' & $sHex2ToDecN & _
				'; Native Dec: ' & Dec($sDecToHexN) & @LF)
	EndIf
	If $sHex2ToDecE <> $iE Then
		ConsoleWrite('E error' & @LF)
	Else
		ConsoleWrite('E: ' & $iE & '; DecToHexE: ' & $sDecToHexE & '; HexToDecE: ' & $sHex2ToDecE & _
				'; Native Dec: ' & Dec($sDecToHexE) & @LF)
	EndIf
	ConsoleWrite('---' & @LF)
Next

Func _RSA_DecToHex($i_Num)
	Local $a_Num, $s_Return, $s_End, $j, $i_Rang = Random(1, 47, 1)

	If Not StringIsDigit($i_Num) Then Return SetError(1, '', 0)
	If Mod(StringLen($i_Num), 2) Then $s_End = Hex(Int(StringRight($i_Num, 1) + 246), 2)
	$a_Num = StringRegExp($i_Num, '\d{2}', 3)
	For $i = 0 To UBound($a_Num) - 1
		$s_Return &= Hex(Int($a_Num[$i] + $j + $i_Rang), 2)
		$j += 1
		If $j = 100 Then $j = 0
	Next
	$s_Return &= $s_End
	$s_Return = StringLeft($s_Return, StringLen($s_Return) / 2) & Hex($i_Rang, 2) & _
			StringTrimLeft($s_Return, StringLen($s_Return) / 2)
	Return $s_Return
EndFunc   ;==>_RSA_DecToHex

Func _RSA_HexToDec($s_Num)
	Local $a_Num, $i_Temp, $i_Return, $j, $i_Rang

	If StringRegExp($s_Num, '(?i)[^\da-f]') Then Return SetError(1, '', 0)
	$i_Rang = Dec(StringMid($s_Num, StringLen($s_Num) / 2, 2))
	$s_Num = StringLeft($s_Num, StringLen($s_Num) / 2 - 1) & _
			StringTrimLeft($s_Num, StringLen($s_Num) / 2 + 1)
	$a_Num = StringRegExp($s_Num, '.{2}', 3)
	For $i = 0 To UBound($a_Num) - 1
		$i_Temp = Dec($a_Num[$i])
		If $i_Temp > 245 Then
			$i_Temp -= 246
		Else
			$i_Temp -= ($j + $i_Rang)
			If $i_Temp < 10 Then $i_Temp = '0' & $i_Temp
		EndIf
		$i_Return &= $i_Temp
		$j += 1
		If $j = 100 Then $j = 0
	Next
	Return $i_Return
EndFunc   ;==>_RSA_HexToDec
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Здравствуйте, у меня вопрос к "кусочкам" кода из вашей библиотеки.
Код:
For $i = 1 To $a_String[0]
		$i_Asc = Asc($a_String[$i])
		Assign($i_Asc, Eval($i_Asc) + 1)
		If Eval($i_Asc) = 1 Then
			$i_Count += 1
			$a_Uniq[$i_Count][0] = $a_String[$i]
			$a_Uniq[$i_Count][1] = __RSA_Calculate($i_Asc, $i_ED, $i_N)
		EndIf
	Next

Данный цикл является проблемным для обусфактора, по причине присутствия таких функций как Eval и Assign. Возможно ли как ни будь заменить эти функции?("кусок" кода был взят из функции _RSA_EnCrypt() и _Rsa_DeCrypt())
Я пытался заменить вот так:
Код:
For $i = 1 To $a_String[0]
		$i_Asc = Asc($a_String[$i])
		$i_Asc =  $i_Asc + 1 ; тут, если я правильно понимаю присваиваются переменной $i_Asc её же нынешние значения с добавлением еденицы
		If $i_Asc = 1 Then; "изьятие" данных из переменной $i_Asc данных и проверка на равенство их к 1
			$i_Count += 1
			$a_Uniq[$i_Count][0] = $a_String[$i]
			$a_Uniq[$i_Count][1] = __RSA_Calculate($i_Asc, $i_ED, $i_N)
		EndIf
	Next

Но тогда функции не зашифровывали и не расшифровывали, возвращая ошибку.
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
MnM
Для данного куска можно использовать IsDeclared, ведь по алгоритму проверка значения " = 1" определяет только срабатывание на переменные 1 раз по уникальности. С обфускатором это не решает проблемы и не лечится стандартными путями, иначе все аналогичные алгоритмы были бы перестроены. Можно использовать объект Scripting.Dictionary в качестве замены. Можно добавить флаги отключающие обфускацию на участке кода.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
В случае обусфактора, приходится не просто флажки ставить у кусков кода, а от начала и до конца ставить флажки, потому что если просто поставить флажки то для assign и eval в обфусцированном скрипте не будет существовать переменных. Пойду Scripting.Dictionary вами предложенную прочитаю :smile:
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
MnM,
ИМХО, В данном случае Scripting.Dictionary кушает значительно меньше ресурсов, чем Assign(), Eval() или IsDeclared().
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Через объекты у меня не получилось :(


Добавлено:
Сообщение автоматически объединено:

Код:
For $i = 1 To $a_String[0]
		$iAsc = ObjCreate("Scripting.Dictionary")
		$iAsc.add("1",Asc($a_String[$i]))
		$var = $iAsc.items
		$var1 = $var[0] + 1
		If $var1 = 1 Then
			$i_Count += 1
			$a_Uniq[$i_Count][0] = $a_String[$i]
			$a_Uniq[$i_Count][1] = __RSA_Calculate($var1, $i_ED, $i_N)
		EndIf
		$iAsc.removeall
	Next
 
Верх