c # — преобразование функции шифрования / дешифрования в PowerShell в PHP (openssl_)

Я пытаюсь адаптировать следующие функции в PowerShell для PHP:

function EncryptDES
{
Param(
[String] $plainText,
[byte[]] $Key,
[byte[]] $Iv
)

$tdsAlg = New-Object System.Security.Cryptography.DESCryptoServiceProvider
$tdsAlg.Key = $Key
$tdsAlg.IV = $Iv
$encrypt = $tdsAlg.CreateEncryptor($tdsAlg.Key, $tdsAlg.IV)
$msEncrypt = New-Object System.IO.MemoryStream
$csEncrypt = New-Object System.Security.Cryptography.CryptoStream $msEncrypt, $encrypt, "Write"$swEncrypt = New-Object System.IO.StreamWriter $csEncrypt
$swEncrypt.Write($plainText)
$swEncrypt.Close()
$csEncrypt.Close()
$msEncrypt.Close()
$encrypt.Clear()
$encrypted = $msEncrypt.ToArray()
$result = [Convert]::ToBase64String($encrypted)
return $result;
}

function DecryptDES
{
Param(
[String] $encrypted,
[byte[]] $Key,
[byte[]] $Iv
)
[byte[]]$NewStr = [System.Convert]::FromBase64String($encrypted)
$tdsAlg = New-Object System.Security.Cryptography.DESCryptoServiceProvider
$tdsAlg.Key = $Key
$tdsAlg.IV = $Iv
$encrypt = $tdsAlg.CreateDecryptor($tdsAlg.Key, $tdsAlg.IV)
$msEncrypt = New-Object System.IO.MemoryStream @(,$NewStr)
$csEncrypt = New-Object System.Security.Cryptography.CryptoStream $msEncrypt, $encrypt, "Read"$swEncrypt = New-Object System.IO.StreamReader $csEncrypt
[String]$result = $swEncrypt.ReadToEnd()
$swEncrypt.Close()
$csEncrypt.Close()
$msEncrypt.Close()
$encrypt.Clear()

return $result;
}

Я пытаюсь преобразовать этот код в эквивалент в PHP с помощью функций openssl_decrypt и openssl_encrpyt, я пытался с помощью следующего кода, но я ничего не получаю:

function encrypt_decrypt($action, $string) {
$output = false;
$encrypt_method = "AES-256-CBC";
$secret_key = 'This is my secret key';
$secret_iv = 'This is my secret iv';
// hash
$key = hash('sha256', $secret_key);

// iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
$iv = substr(hash('sha256', $secret_iv), 0, 16);
if ( $action == 'encrypt' ) {
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
$output = base64_encode($output);
} else if( $action == 'decrypt' ) {
$output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
}
return $output;
}

Если бы кто-то мог направить меня, я был бы признателен за вашу помощь, спасибо

0

Решение

Это было решение, которое я разработал, и оно прекрасно работает:

<?php
$txt = 'ciphertext';
$key = '12345678';
$iv = '12345678';
$method = 'des-cbc';
// cipher_text
$code = openssl_encrypt($txt, $method, $key, true, $iv);

// ciper_text with base64_encode();
echo base64_encode($code);

// decrypt method
$result = openssl_decrypt($code, $method, $key, 1, $iv);
echo $result;
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector