inververs
AutoIT Гуру
- Сообщения
- 2,135
- Репутация
- 465
Категория: Кодирование, Шифрование, Microsoft Cryptographic Service Provider, OpenSSL, openssl_encrypt, openssl_decrypt, php, AES, Rijndael
Описание:
Библиотека предназначена для шифрования текста симметричным алгоритмом блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит) с использованием пользовательского пароля.
Функции используют для шифрования Microsoft Cryptographic Service Provider в AutoIt и стандартную библиотеку OpenSSL в PHP.
Особенности:
Функции:
Пример:
PHP класс:
PHP пример:
Примечание: Для Windows XP вместо SHA256 используйте SHA1
Файл: Скачать CryptPhp.au3
Источник: autoit-script.ru
Автор(ы): inververs
Описание:
Библиотека предназначена для шифрования текста симметричным алгоритмом блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит) с использованием пользовательского пароля.
Функции используют для шифрования Microsoft Cryptographic Service Provider в AutoIt и стандартную библиотеку OpenSSL в PHP.
Особенности:
- Библиотека не имеет внешних зависимостей.
- Работает с текстом в кодировке UTF-8
- Шифрованные данные преобразовывает в формат Base64 для удобной передачи по сети
- Использует Microsoft API для шифрования/дешифрирование
- Ключ формируется на основе пользовательского пароля и алгоритма SHA256
- В отличии от _Crypt_DecryptData использует начальный вектор инициализации (Initialization vector (IV))
Функции:
Код:
;Функция шифрования (Данные, пароль, алгоритм)
_CryptPhp_EncryptString($sData, $sCode[, $sAlgo = 'AES-192-CBC'])
;Функция дешифрирования (Данные, пароль, алгоритм)
_CryptPhp_DecryptString($sData, $sCode[, $sAlgo = 'AES-192-CBC'])
Пример:
Код:
#include "CryptPhp.au3"
Local $sData = 'A pointer to a DWORD value that indicates the length of the pbData buffer.'
Local $sCode = '123_MyPassword!'
Local $sEncrypted = _CryptPhp_EncryptString($sData, $sCode)
ConsoleWrite(@error & ' ' & @extended & ' ' & $sEncrypted & @CRLF)
Local $sDecrypted = _CryptPhp_DecryptString($sEncrypted, $sCode)
ConsoleWrite(@error & ' ' & @extended & ' ' & $sDecrypted & @CRLF)
PHP класс:
PHP:
class CryptPhp
{
private $cipherAlgorithm;
private $hashAlgorithm;
private $iv_num_bytes;
public function __construct($cipherAlgorithm = 'AES-192-CBC')
{
$this->cipherAlgorithm = $cipherAlgorithm;
$this->hashAlgorithm = 'SHA256';
$this->iv_num_bytes = openssl_cipher_iv_length($cipherAlgorithm);
if ( ! in_array($cipherAlgorithm, openssl_get_cipher_methods(true))) {
throw new \Exception("CryptPhp:: - unknown cipher algo {$cipherAlgorithm}");
}
if ( ! in_array($this->hashAlgorithm, openssl_get_md_methods(true))) {
throw new \Exception("CryptPhp:: - unknown hash algo {$this->hashAlgorithm}");
}
}
public function encryptString($in, $key)
{
$iv = mcrypt_create_iv($this->iv_num_bytes, MCRYPT_DEV_URANDOM);
$hash = openssl_digest($key, $this->hashAlgorithm, true);
$encrypted = openssl_encrypt($in, $this->cipherAlgorithm, $hash, OPENSSL_RAW_DATA, $iv);
if ($encrypted === false) {
throw new \Exception('CryptPhp::encryptString - Encryption failed: ' . openssl_error_string());
}
return base64_encode($iv . $encrypted);
}
public function decryptString($in, $key)
{
$raw = base64_decode($in);
if (strlen($raw) < $this->iv_num_bytes) {
throw new \Exception('CryptPhp::decryptString - ' .
'data length ' . strlen($raw) . " is less than iv length {$this->iv_num_bytes}");
}
$iv = substr($raw, 0, $this->iv_num_bytes);
$raw = substr($raw, $this->iv_num_bytes);
$hash = openssl_digest($key, $this->hashAlgorithm, true);
$res = openssl_decrypt($raw, $this->cipherAlgorithm, $hash, OPENSSL_RAW_DATA, $iv);
if ($res === false) {
throw new \Exception('CryptPhp::decryptString - decryption failed: ' . openssl_error_string());
}
return $res;
}
}
PHP пример:
PHP:
$data = 'A pointer to a DWORD value that indicates the length of the pbData buffer.';
$code = '123_MyPassword!';
$crypt = new CryptPhp();
$encrypted = $crypt->encryptString($data, $code);
$decrypted = $crypt->decryptString($encrypted, $code);
echo "encrypted => $encrypted\n";
echo "decrypted => $decrypted\n";
Примечание: Для Windows XP вместо SHA256 используйте SHA1
Файл: Скачать CryptPhp.au3
Источник: autoit-script.ru
Автор(ы): inververs