powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / AES шифрование в делфи и php
12 сообщений из 12, страница 1 из 1
AES шифрование в делфи и php
    #39469829
Артёмs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не получается расшифровать в делфи зашифрованную строку в PHP.

PHP, результат на выходе "hRjrOEzh7+HYafV8OSWyTaiA8P3HeF7F"
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?php
define ("CRYPT_ALG", MCRYPT_RIJNDAEL_192); // Алгоритм по умолчанию
define ("CRYPT_KEY", '6455E308F0D4018B976EC530130C8EC2');

function encrypt($encrypt, $base64 = true, $crypt_alg = '') {
    $crypt_alg = $crypt_alg ? $crypt_alg : CRYPT_ALG;
    $iv = mcrypt_create_iv(mcrypt_get_iv_size($crypt_alg, MCRYPT_MODE_ECB), MCRYPT_RAND);
    $passcrypt = mcrypt_encrypt($crypt_alg, CRYPT_KEY, $encrypt, MCRYPT_MODE_ECB, $iv);
    return $base64 ? base64_encode($passcrypt) : $passcrypt;
}

function decrypt($decrypt, $base64 = true, $crypt_alg = '') {
    $crypt_alg = $crypt_alg ? $crypt_alg : CRYPT_ALG;
    $decoded = $base64 ? base64_decode($decrypt) :$decrypt;
    $iv = mcrypt_create_iv(mcrypt_get_iv_size($crypt_alg, MCRYPT_MODE_ECB), MCRYPT_RAND);
    $decrypted = mcrypt_decrypt($crypt_alg, CRYPT_KEY, $decoded, MCRYPT_MODE_ECB, $iv);
    return $decrypted;
}
$a = encrypt('Artyom');
echo $a . ' > ' . decrypt($a); 
?>



Для делфи использую библиотеку https://github.com/TurboPack/LockBox
Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TForm1.FormCreate(Sender: TObject);
begin
  AES.CipherMode := cmECB;
  AES.KeySize := ks192;
  AES.GenerateKey('6455E308F0D4018B976EC530130C8EC2');
  Edit.Text := AES.DecryptString(EncdDecd.DecodeString('hRjrOEzh7+HYafV8OSWyTaiA8P3HeF7F'));
end;
...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39469837
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
а почему AES.CipherMode := cmECB ?
у тебя в PHP не блочное шифрование
...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39469838
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АртёмsНе получается расшифровать в делфи зашифрованную строку в PHP.

Не вижу где ты её в Дельфи декодируешь из Base64.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39469840
Артёмs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovАртёмsНе получается расшифровать в делфи зашифрованную строку в PHP.

Не вижу где ты её в Дельфи декодируешь из Base64.

EncdDecd.DecodeString
...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39469842
Артёмs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При попытке расшифровать ошибка: "No mapping for the Unicode character exists in the target multi-byte code page"
...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39469858
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АртёмsEncdDecd.DecodeString
Почему ты думаешь, что эта функция раскодирует из Base64?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39469860
Артёмs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovАртёмsEncdDecd.DecodeString
Почему ты думаешь, что эта функция раскодирует из Base64?


Проверял, кодировал через "онлайн кодировщик", и декодировал в делфи через EncdDecd.DecodeString.
Можешь проверить. В uses надо добавить EncdDecd.
...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39470600
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артёмs,

Код: php
1.
mcrypt_encrypt($crypt_alg, CRYPT_KEY, $encrypt, MCRYPT_MODE_ECB, $iv)


Как я понял из этого , то mcrypt_encrypt принимает готовый ключ, в двоичном формате. А функция GenerateKey, как следует отсюда
Код: pascal
1.
2.
3.
4.
procedure TLbRijndael.GenerateKey(const Passphrase: string);
begin
  TLMD.GenerateLMDKey(FKey, FKeySizeBytes, GetBytes(Passphrase));
end;


создаёт ключ на основе пароля "6455E308F0D4018B976EC530130C8EC2", да ещё и нестандартным хэшом (LMD -> LockBox message digest). Т.е. Вы тупо шифруете и расшифровываете разными ключами.

В данном случае, вместо 'AES.GenerateKey('6455E308F0D4018B976EC530130C8EC2');' надо так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TForm1.FormCreate(Sender: TObject);
var
  Key: string = #$64#$55#$E3#$08#$F0#$D4#$01#$8B#$97#$6E#$C5#$30#$13#$0C#$8E#$C2;
begin
  AES.CipherMode := cmECB;
  AES.KeySize := ks192;
  AES.SetKey(Key);
  Edit.Text := AES.DecryptString(EncdDecd.DecodeString('hRjrOEzh7+HYafV8OSWyTaiA8P3HeF7F'));
end;


Но в данном случае всё равно не взлетит, т.к. у вас указан алгоритм MCRYPT_RIJNDAEL_192, где 192, как я понимаю - это длина ключа в битах, т.к. 24 байта. А у вас ключ 16 байт длиной, т.е. 128 бит. Поэтому AES.SetKey(Key) скорее всего тупо вывалится в AV. Почему это молча хавает PHP я не знаю.
...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39470601
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS: Посмотрел пример для PHP (внизу), Вы ещё и шифруете неправильно...
...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39470631
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так делал на php:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?php
	error_reporting(0);
	if ($cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '')) {
		$key  = hash('sha256', 'Clave secreta', true);
		$iv   = hex2bin('1E39F369E90DB33AA73B442BBBB6B0B9');
		//$iv   = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
		$data = 
			'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234867890'."\n".
			'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234867890'."\n".
			'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234867890'."\n".
			'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234867890'."\n".
			'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234867890'."\n".
			'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234867890'."\n";
		if (mcrypt_generic_init($cipher, $key, $iv) >= 0) {
			echo base64_encode( mcrypt_generic($cipher, $data) );
			mcrypt_generic_deinit($cipher);
		}
		mcrypt_module_close($cipher);
	}
?>

...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39471545
Артёмs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, большое спасибо за то что разжевал)
Решил задачу, взяв код для php с сайта справки(ссылку на которую Вы оставили выше) и библиотеки для делфи DCPCrypt-master.
alekcvp, а не подскажешь, где у LbRijndael задать IV для режима CBC? или он там сам задаётся через рандомною строку?
...
Рейтинг: 0 / 0
AES шифрование в делфи и php
    #39471665
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артёмs,

Понятия не имею, я не пользуюсь этой библиотекой. Подозреваю что все ответы - в исходных кодах.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / AES шифрование в делфи и php
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]