【发布时间】:2020-08-04 07:46:17
【问题描述】:
试图将信息从 PowerShell 发送到 PHP。 这里提供的代码不是用于生产的,只是为了说明我的问题并寻求帮助。
在 PowerShell 中加密文本并在 PHP 中解密时,我得到了正确的文本,但格式错误。最终结果如下:
我认为这与编码有关,但我不确定,因此不知道如何解决此问题。 非常感谢任何提示或解决方案。
这是两个简化的 test 脚本。
PowerShell - 加密
Function EncryptString {
Param ([string]$inputStr)
$inputBytes = [System.Text.Encoding]::UTF8.GetBytes($inputStr)
$enc = [System.Text.Encoding]::UTF8
$AES = New-Object System.Security.Cryptography.AESManaged
$iv = "&9*zS7LY%ZN1thfI"
$AES.Mode = [System.Security.Cryptography.CipherMode]::CBC
#$AES.Padding = [System.Security.Cryptography.PaddingMode]::Zeros
$AES.BlockSize = 128
$AES.KeySize = 256
$AES.IV = $enc.GetBytes($iv)
$AES.Key = $enc.GetBytes($script:passKey)
$encryptor = $AES.CreateEncryptor()
$encryptedBytes = $encryptor.TransformFinalBlock($inputBytes, 0, $inputBytes.length)
$output = [Convert]::ToBase64String($encryptedBytes)
return $output
}
$passkey = "12345678901234567890123456789012"
$txtTemp = EncryptString "TestString"
Write-host $txtTemp
PHP - 解密
<?php
$iv = "&9*zS7LY%ZN1thfI";
$passKey = "12345678901234567890123456789012";
$txtTemp ="N/l69qyZqPyWRTDWLCQBtA==";
$cipher = "aes-256-cbc";
$returnStr = openssl_decrypt($txtTemp, $cipher, $passKey, $options=OPENSSL_ZERO_PADDING, $iv);
echo $returnStr."<br/>";
?>
【问题讨论】:
-
您需要指定 PKCS7padding(一些实现称之为 PKCS5padding),而不是零填充。您看到的是应该被加密器剥离的填充字节。
-
@PresidentJamesMoveonPolk 可能更好地发布为答案。是的,这是不断出现的错误之一,但如果您正在寻找代表,您最好完全跳过加密/密码学标签。所以让我们补偿自己:)
标签: php powershell encryption encoding