появилась задача зашифровать текст на сервере (php) и расшифровать его скриптом powershell. Пытаюсь найти общие функции для шифрования/дешифрования по ключу. Ничего рабочего найти не могу. Различные костыли кода с Rijndael256ECB в PS и mcrypt_encrypt в php дают разный результат.
Подскажите пожалуйста, что можно использовать? Мой не рабочий код (найдено на просторах интернета):
powershell( PS v.4 Win7)
function Encrypt-Rijndael256ECB {
param(
[byte[]]$Key,
[string]$Plaintext
)
$RijndaelProvider = New-Object -TypeName System.Security.Cryptography.RijndaelManaged
# Set block size to 256 to imitate MCRYPT_RIJNDAEL_256
$RijndaelProvider.BlockSize = 256
# Make sure we use ECB mode, or the generated IV will fuck up the first block upon decryption
$RijndaelProvider.Mode = [System.Security.Cryptography.CipherMode]::ECB
$RijndaelProvider.Key = $key
# This object will take care of the actual cryptographic transformation
$Encryptor = $RijndaelProvider.CreateEncryptor()
# Set up a memorystream that we can write encrypted data back to
$EncMemoryStream = New-Object System.IO.MemoryStream
$EncCryptoStream = New-Object System.Security.Cryptography.CryptoStream -ArgumentList $EncMemoryStream,$Encryptor,"Write"
$EncStreamWriter = New-Object System.IO.StreamWriter -ArgumentList $EncCryptoStream
# When we write data back to the CryptoStream, it'll get encrypted and written back to the MemoryStream
$EncStreamWriter.Write($Plaintext)
# Close the writer
$EncStreamWriter.Close()
# Close the CryptoStream (pads and flushes any data still left in the buffer)
$EncCryptoStream.Close()
$EncMemoryStream.Close()
# Read the encrypted message from the memory stream
$Cipher = $EncMemoryStream.ToArray() -as [byte[]]
$CipherText = [convert]::ToBase64String($Cipher)
# return base64 encoded encrypted string
return $CipherText
}
$enc = [system.Text.Encoding]::UTF8
$string1 = "1234567890101212"
$key = $enc.GetBytes($string1)
$string = "123"
Encrypt-Rijndael256ECB $key $string
pause
Вывод: zWbrs5FtqqRUtbjgKHsXMmjDtZ+itZU5yJF6z2MxxZM=
PHP (Apache 2.2. + php 7.1)
<?
$key = "1234567890101212";
$to_encrypt = "123";
$decrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $to_encrypt, MCRYPT_MODE_ECB);
echo ( base64_encode($decrypted) );
?>
Вывод: pmZ0YSUQMUd2O1WF2g4cMT4YBI80D3c6qL+tqSVZHCs=
И вообще, mcrypt_encrypt уже устарел. Спасибо!
mcrypt_encrypt
использует padding с нулями, а .NET по умолчанию ставит PKCS7
. В павершел вам нужно добавить 1 строчку:
$RijndaelProvider.Padding = [System.Security.Cryptography.PaddingMode]::Zeros
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пробовал запустить socket сервер, но выходят ошибкиПоддерживает ли php в open sever сокеты? И что нужно сделать, чтобы работать с ними в нем?
Строка "INSERT INTO admin_history (user_id, username, usernick, userlevel, delete_user_id) SELECT user_id, username, usernick, userlevel, delete_user_id FROM user WHERE (user_id = :user_id)" не записыват данные в бд
Мне нужно решить достаточно тривиальную задачу, но штатными методами бизнеc-процессов Битрикс сделать это не получилось, а тк