powershell - PowerShell的echo和CMD的echo的区别

标签 powershell cmd hash sha1 git-hash

我在 PowerShell 中得到以下信息:

D:\> echo "Apple Pie" | git hash-object --stdin
157cb7be4778a9cfad23b6fb514e364522167053

D:\> "Apple Pie" | git hash-object --stdin
157cb7be4778a9cfad23b6fb514e364522167053

但在 CMD.exe 中:

C:\>echo "Apple Pie" | git hash-object --stdin
bb3918d5053fea31fc9a58fae1e5bdeabe3ec647

在 PluralSight 视频中,我看到了与 Mac 控制台不同的值:

enter image description here

在每种情况下,从 echo 管道传输的确切值是多少?

如果我转到其中一个在线 SHA1 生成器并输入字符串 Apple Pie,我会得到不同的哈希值。从这些我得到:

8d69b7365f59237d3fb052c1f2f15ea33457fe51

最佳答案

据我了解:

使用CMD:

echo Apple Pie|git hash-object --stdin

在 PowerShell 中返回与以下内容相同的想法

"Apple Pie" | git hash-object --stdin

也就是说:

157cb7be4778a9cfad23b6fb514e364522167053

@Mofi 似乎是对的,您可以使用以下命令在 Powershell 中重现 CMD 结果:

'"Apple Pie" ' | git hash-object --stdin

解释一下Mac OS:要获得157cb7be4778a9cfad23b6fb514e364522167053,散列的真实字符列表是'Apple Pie\r\n'(带有回车符换行符),在Mac或Linux中命令行是'Apple Pie\r'

如果你想测试这个:将 'Apple Pie' 放入带有回车符的文本文件中,并将其保存为 Windows 文本样式 (CR+LF),然后使用 git哈希对象 yourfile.txt。然后以Linux风格(LF)保存并再次测试,你会发现你的两个哈希值。


关于\r\n的部分。

“苹果派”|其中 {$_.length -eq 9} 显示该字符串的长度正好是 9 个字符

对我来说,这是因为在你的情况下,管道位于两个 PowerShell 部件之间,管道传输一个对象。当管道位于 PowerShell 和外部 EXE 之间时,会添加\r\n。以下是使用 C# 编写的小 exe 文件进行测试的方法:

using System;
namespace C_Param
{
  class Program
  {
    static void Main(string[] args)
    {
      string line = Console.In.ReadToEnd();
      foreach (char character in line){
        Console.WriteLine(String.Format("{0:X2}", Convert.ToByte(character)));
      }
    }
  }
}

PowerShell 控制台中的结果是:

"Apple Pie" | .\C_Param.exe
41
70
70
6C
65
20
50
69
65
0D
0A

CMD 控制台中的结果是:

echo "Apple Pie" | .\C_Param.exe
22
41
70
70
6C
65
20
50
69
65
22
20
0D
0A

QED?

关于powershell - PowerShell的echo和CMD的echo的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61153475/

相关文章:

php - PHP 的 password_verify() 对极长密码(DoS 攻击)是否安全?

java - 证书的 base32 编码散列不匹配

c# - 提供 .NET 方法作为委托(delegate)回调

html - 呈现 HTML 片段而不将其保存到文件中

c - 如何在 Windows-10 的 C 控制台程序中获取鼠标输入?

python - App Engine 批量加载程序下载数据损坏文件

process - 从命令行启动进程时,如何捕获进程的PID?

windows - 将小的 PS 脚本转换为 .BATch 文件中的长行

windows - 创建快捷方式以使用 Powershell 运行 Powershell

c++ - 通过给定点的最小线数