Tạo hàm băm SHA-256 từ dòng lệnh Linux


233

Tôi biết chuỗi "foobar" tạo ra hàm băm SHA-256 c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2bằng cách sử dụng http://hash.online-convert.com/sha256-generator

Tuy nhiên, dòng lệnh shell:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

Tạo ra một hàm băm khác nhau. Tôi đang thiếu gì?


4
sha256sum < foobar. Không cần mèo , echo , printf , ... Xem thêm Sử dụng mèo vô dụng?
koppor

7
@koppor < foobarkhông giống như echo foobar |. Tương đương với echo foobar |sẽ là sha256sum <<< foobarnhưng điều đó thêm một dòng mới vào foobar giống như echo.
mvds

openssl dgst -sha256 foobarlàm việc cho tôi trên MacOS High Sierra, trong khi echo -n foobar | openssl dgst -sha256đưa ra một câu trả lời không chính xác.
tốt lành99

Câu trả lời:


361

echothông thường sẽ xuất ra một dòng mới, bị chặn -n. Thử cái này:

echo -n foobar | sha256sum

76
LƯU Ý: trên OS X (BSD), đó làecho -n foobar | shasum -a 256
Olie

6
chỉ cần sử dụng printf;)
dylnmc

11
Trên OSX, có thể hữu ích để tạo bí danh:alias sha256sum='shasum --algorithm 256'
Jonathan Cross

1
Tại sao nó kết thúc với * -
Philip Rego

2
@PhilipRego Đó là shasum của đầu vào trên stdin, do đó thay vì tên tệp -được in.
mvds

100

Nếu bạn đã cài đặt openssl, bạn có thể sử dụng:

echo -n "foobar" | openssl dgst -sha256

Đối với các thuật toán khác mà bạn có thể thay thế -sha256với -md4, -md5, -ripemd160, -sha, -sha1, -sha224,-sha384 , -sha512hoặc -whirlpool.


Có cách nào để xác định số lượng vòng bạn muốn trong sha512 không? Tôi nhìn và không thể tìm thấy nó và tự hỏi nếu bạn sẽ biết?
F1lt3r

1
@AlistairMacDonald - Tôi không biết chính xác những gì bạn đang tìm kiếm. AFAIK, SHA512 cần 80 vòng; Nếu bạn muốn thao tác chức năng, nó sẽ không còn là sha512 nữa. BTW, bạn có thể tìm kiếm / đặt câu hỏi của bạn trong crypto.stackexchange.com .
Farahmand

3
Không giống như câu trả lời được chấp nhận, điều này hoạt động cho MacOS.
greefwefwqg3

45

Nếu lệnh sha256sum không khả dụng (trên Mac OS X v10.9 (Mavericks) chẳng hạn), bạn có thể sử dụng:

echo -n "foobar" | shasum -a 256


1
Đẹp! Tôi đã thêm cái này vào hàm .bash_profile sha256 () {echo -n "$ *" | shasum -a 256} và gọi như: ~ $ sha256 foobar
rbento

Không giống như câu trả lời được chấp nhận, điều này hoạt động cho MacOS
tinyfwefwqg3

Hay bạn có nghĩa là Ubuntu 10.10 (Maverick Meerkat) ? (không 's', Maverick ). Nó được phát hành vào năm 2010 trong khi Mac OS X v10.9 được phát hành một tháng trước câu trả lời này.
Peter Mortensen

29

echo -nhoạt động và dường như không bao giờ biến mất do sử dụng lịch sử lớn, tuy nhiên, theo các phiên bản gần đây của tiêu chuẩn POSIX , các ứng dụng tuân thủ mới được "khuyến khích sử dụng printf".



7

Tôi tin rằng echođầu ra một dòng mới. Hãy thử sử dụng -nnhư một tham số để lặp lại để bỏ qua dòng mới.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.