【问题标题】:Powershell encrypt and PHP decrypt string issuePowershell 加密和 PHP 解密字符串问题
【发布时间】: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


【解决方案1】:

您看到填充字节用于使 AES 输入长度成为块大小的倍数。

(误导性命名的)OPENSSL_ZERO_PADDING 选项的意思是“根本没有填充”,即加密前不添加填充,解密后不删除填充。

删除让 openssl_decrypt 剥离 PKCS#5/7 填充字节的选项。

【讨论】:

    【解决方案2】:

    您看到的是 AesManaged 类应用的 PKCS7 填充中的填充字节。这是默认设置。它也是 PHP openssl_encrypt 和 openssl_decrypt 的默认值。所以坚持使用默认值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 2013-06-11
      相关资源
      最近更新 更多