gpt4 book ai didi

powershell - 在 PowerShell 版本 2 中将字符串转换为字节数组

转载 作者:行者123 更新时间:2023-12-03 06:52:58 28 4
gpt4 key购买 nike

我想要做的是使用 SHA1 UTF-8 加密,然后使用 base64 编码和密码字符串值。然而,我需要先加密,然后编码,但我反其道而行之。

这是代码:

# Create Input Data 
$enc = [system.Text.Encoding]::UTF8
$string1 = "This is a string to hash"
$data1 = $enc.GetBytes($string1)

# Create a New SHA1 Crypto Provider
$sha = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider

$# Now hash and display results
$result1 = $sha.ComputeHash($data1)

所以,当我进行哈希处理时,我意识到我必须从字符串中获取一个 byte[],但我不知道该怎么做。我认为 .Net 库中有一种简单的方法,但找不到示例。

所以如果我有一个字符串,例如:

$string = "password"

如何将其转换为可以在::ComputeHash($string) 上使用的字节数组?

所以我最终得到的是一个加密的 SHA-1 和 Base 64 编码的 UTF-8 密码,上面的代码就是这样做的,但它返回的结果与我在 java 中编码相同的东西时不同,在 java 中我加密了首先,然后将该结果转换为 Base 64 编码。

我假设虽然 api 不支持直接加密字符串,但可能有一种解决方法可以让您执行此操作。这就是我正在尝试做的事情。

所以我假设我的代码问题是我必须先对其进行加密,然后对其进行编码以获得正确的值。正确还是我在这里遗漏了一些东西?

这是有效的相关java代码:

//First method call uses a swing component to get the user entered password.
String password = getPassword();

//This line is where the work starts with the second and third methods below.
String hashed = byteToBase64(getHash(password));

//The second method call here gets the encryption.
public static byte[] getHash(String password) {
MessageDigest digest = null;
byte[] input = null;
try {
digest = MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
digest.reset();
try {
input = digest.digest(password.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return input;
}

//Then the third method call here gets the encoding, FROM THE ENCRYPTED STRING.
public static String byteToBase64(byte[] data){
return new String(Base64.encodeBase64(data));

当我使用密码字符串“password”运行java代码时,我得到

[91、-86、97、-28、-55、-71、63、63、6、-126、37、11、108、-8、51、27、126、-26、-113、 -40]这就是加密。

然后当我在java中编码时我得到这个:W6ph5Mm5Pz8GgiULbPgzG37mj9g=

但是当我在 PowerShell 中运行它时,我得到了这个,因为它首先被编码为 UTF8:

91 170 97 228 201 185 63 63 6 130 37 11 108 248 51 27 126 230 143 216

然后,当我运行这行代码进行转换时,出现错误:

$base64 = [System.Convert]::FromBase64String($result)

使用“1”个参数调用“FromBase64String”时出现异常:“Base-64 字符数组的长度无效。”在行:1个字符:45

但是,如果我运行新的代码行以使其从下面变为十六进制,我会得到:

$hexResult = [String]::Join("", ($result | % { "{0:X2}" -f $_}))
PS C:\Program Files (x86)\PowerGUI> Write-Host $hexResult

5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8

但我需要最终得到这个值:

W6ph5Mm5Pz8GgiULbPgzG37mj9g=

同样,这甚至可能无法做到,但我正在尝试找到一种解决方法。

最佳答案

您很可能只需要在最后一行之后将哈希值转换为 base64。

$enc = [system.Text.Encoding]::UTF8
$string1 = "This is a string to hash"
$data1 = $enc.GetBytes($string1)

# Create a New SHA1 Crypto Provider
$sha = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider

# Now hash and display results
$result1 = $sha.ComputeHash($data1)
[System.Convert]::ToBase64String($result1)

文本->字节->加密/哈希->Base64

这是以文本格式发送加密数据的非常常见模式。

关于powershell - 在 PowerShell 版本 2 中将字符串转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8051713/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com