如何在不使用流的情况下用PowerShell生成匹配Linux的字符串MD5哈希
在PowerShell中生成与Linux一致的字符串MD5哈希(不使用MemoryStream/StreamWriter)
要让PowerShell生成的MD5哈希和Linux一致,核心是对齐编码格式和字符串是否包含换行符两个关键点,无需依赖MemoryStream或StreamWriter,直接操作字节数组即可实现:
关键前提
Linux下md5sum处理字符串时:
- 默认采用UTF-8编码转换字节
- 使用
echo "str"时会自动追加换行符\n,用echo -n "str"则不追加
场景1:对应Linux echo -n "your_string" | md5sum(无换行符)
# 定义目标字符串 $targetStr = "your_string" # 转为UTF-8字节数组(无BOM) $utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($targetStr) # 计算MD5哈希 $hashBytes = [System.Security.Cryptography.MD5]::Create().ComputeHash($utf8Bytes) # 转为小写十六进制字符串(匹配Linux输出格式) $md5Result = ($hashBytes | ForEach-Object { $_.ToString("x2") }) -join "" # 输出结果 $md5Result
场景2:对应Linux echo "your_string" | md5sum(带换行符)
只需在字符串末尾拼接PowerShell的换行符n即可:
$targetStr = "your_string" $utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($targetStr + "`n") $hashBytes = [System.Security.Cryptography.MD5]::Create().ComputeHash($utf8Bytes) $md5Result = ($hashBytes | ForEach-Object { $_.ToString("x2") }) -join "" $md5Result
验证示例
以字符串test为例:
- 无换行场景:Linux输出
098f6bcd4621d373cade4e832627b4f6,PowerShell脚本运行结果一致 - 带换行场景:Linux输出
d8e8fca2dc0f896fd7cb4cb0031ba249,PowerShell脚本运行结果一致
内容的提问来源于stack exchange,提问作者cybernado
相关产品推荐
相关产品推荐

