【问题标题】:Info about ConvertFrom-SecureString关于 ConvertFrom-SecureString 的信息
【发布时间】:2017-10-18 07:13:41
【问题描述】:

我正在尝试弄清楚下面报告的代码如何工作。

$number =+313331234568
$key = [System.Text.Encoding]::Unicode.GetBytes('9999b9bc-99a9-99e9-b999-999f9a999c9d')
$s = ConvertTo-SecureString -String $number -AsPlainText -Force | ConvertFrom-SecureString -Key $key[1..32]
return $s

拜托,你能帮我理解如何对报告的作品进行编码吗?

不是很清楚key后面括号中的值是如何对从Write-Host $key得到的字节数组使用的,输出如下:

57 0 57 0 57 0 57 0 98 0 57 0 98 0 99 0 45 0 57 0 57 0 97 0 57 0 45 0 57 0 57 0 101 0 57 0 45 0 98 0 57 0 57 0 57 0 45 0 57 0 57 0 57 0 102 0 57 0 97 0 57 0 57 0 57 0 99 0 57 0 100 0 PS C:\Users\admin> 写入主机 $key 57 0 57 0 57 0 57 0 98 0 57 0 98 0 99 0 45 0 57 0 57 0 97 0 57 0 45 0 57 0 57 0 101 0 57 0 45 0 98 0 57 0 57 0 57 0 45 0 57 0 57 0 57 0 102 0 57 0 97 0 57 0 57 0 57 0 99 0 57 0 100 0 PS C:\Users\admin> $keym = (57 ,57 ,57 ,57 ,98 ,57 ,98 ,99 ,45 ,57 ,57 ,97 ,57 ,45 ,57 ,57 ,101 ,57 ,45 , 98 ,57 ,57 ,57 ,45 ,57 ,57 ,57 ,102 ,57 ,97 ,57 ,57 ,57 ,99 ,57 ,100) PS C:\Users\admin> $s = ConvertTo-SecureString -String $number -AsPlainText -Force | ConvertFrom-SecureString -Key $keym ConvertFrom-SecureString : Valore 密钥无效。 La lunghezza valida per key 开发 essere 128 位、192 位或 256 位。 在里加:1 车:67 + ... ing $number -AsPlainText -Force | ConvertFrom-SecureString -Key $keym + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [ConvertFrom-SecureString], PSArgumentException +fullyQualifiedErrorId:参数,Microsoft.PowerShell.Commands.ConvertFromSecureStringCommand

我想应用相同的解密/加密,但在 Unix 上使用 OpenSSL。

【问题讨论】:

    标签: .net powershell encryption


    【解决方案1】:
    $number =+313331234568
    

    这只是定义了一个数字。 + 毫无意义,也可以删除。

    $key = [System.Text.Encoding]::Unicode.GetBytes('9999b9bc-99a9-99e9-b999-999f9a999c9d')
    

    这会将带有 UUID 的 Unicode 字符串转换为字节数组。字符 '9' 被转换为 2 个字节,(整数)值 57 和 0 等。

    ConvertTo-SecureString -String $number -AsPlainText -Force | ...
    

    这会将数字从开头转换为安全字符串。

    ... | ConvertFrom-SecureString -Key $key[1..32]
    

    这会尝试将之前的安全字符串转换为(仍然加密的)ASCII 表示,使用存储在$key 中的字节数组中的第 2 到第 33 个字节作为加密密钥。这是为了使加密独立于安全字符串将绑定到的主机和用户,以便任何知道密钥的用户 ($key[1..32]) 可以在任何主机上导入导出的数据。 .. 是 PowerShell 的范围运算符,它生成从第一个操作数 (1) 开始到第二个操作数 (32) 结束的数字序列。 [] 运算符返回与给定索引 ([1, 2, ..., 32]) 匹配的所有数组元素。

    您在示例中遇到的错误是因为您尝试使用 36 字节密钥加密数据。仅允许 16 字节(128 位)、24 字节(192 位)和 32 字节(256 位)。


    导出的数据与 OpenSSL 不兼容,顺便说一句。如果您想在 Unix 主机上使用 OpenSSL 解密数据:使用 OpenSSL 的 Windows 端口进行加密。

    【讨论】:

    • 谢谢安斯加尔!您认为可以使用 TCL 和 OpenSSL 解密使用上述功能生成的内容吗?谢谢!
    • 什么内容?什么功能? OpenSSL 通常用于传输加密,但can be used for files 也是如此。
    • HI Ansgar,使用范围运算符选择了哪些字节?零也包括在内?您认为在 UNIX 系统下是否有可能获得相同的逻辑?
    • 嗨 Ansgar,数据是使用 AES-256 加密的,所以我有密钥和数据,为什么我无法使用 openssl 获取明文数据?谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 2011-03-19
    • 2016-01-04
    • 2013-07-20
    • 2013-08-24
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多