Câu hỏi Làm thế nào để có được MD5 băm của một chuỗi trực tiếp trong thiết bị đầu cuối?


Làm thế nào để tôi có được MD5 băm của một chuỗi trực tiếp từ thiết bị đầu cuối?

Ví dụ, tôi muốn chuỗi abcdefg băm. Hiện tại md5sum lệnh chỉ chấp nhận tên tệp làm đầu vào. Tôi muốn chỉ cần nhập vào dòng sau và mọi thứ được thực hiện với.

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

Làm thế nào tôi có thể đạt được điều đó?


151
2017-07-20 11:08


gốc


md5 -s abcdefg - raitisd


Các câu trả lời:


Bạn cũng có thể nói điều gì đó như thế này:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

Về cơ bản nó giống như mô tả của @enzotib, nhưng có lẽ đơn giản hơn một chút.


200
2017-07-20 11:47



Bạn cũng muốn cập nhật kết quả ví dụ, như 7803ffca ... là kết quả với dòng mới được thêm vào. Kết quả chính xác cho lệnh trên là 83218ac34c1834c26781fe4bde918ee4 - - Xanthir
tại sao có không gian và dấu gạch ngang ở cuối? - keune
Vui lòng sửa tôi nếu tôi sai, nhưng tôi nghĩ điều này là do MD5sum được áp dụng cho luồng dữ liệu, trái ngược với việc đọc nội dung tệp có tên liên quan đến nó. - jfmessier
Lưu ý rằng -n là bắt buộc. Không có nó, băm của bạn sẽ hoàn toàn sai vì nó bao gồm ký tự dòng mới. - Pithikos
Điều này đã giúp tôi trên macOS quá, mặc dù nó hơi khác nhau: echo -n Welcome | md5 - Edward J. Stembler


Rất đơn giản, nó chấp nhận stdin, vì vậy

md5sum <<<"my string"

Để tránh dòng mới được thêm vào bởi shell:

printf '%s' "my string" | md5sum

59
2017-07-20 11:10



Tặng cả hai @messier và @enzotib một phiếu bầu; cả hai đều thuộc loại "đơn giản thanh lịch" được đánh giá cao của tôi. Tôi muốn được sử dụng <<<" ống trong một kịch bản; echo string thắng cho dòng lệnh. Làm tốt. - Tom
+1 để sử dụng printfđúng. Nếu bạn muốn có tổng mà không có -, đặt | cut -d ' ' -f 1. Sử dụng ví dụ: sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1) - Lekensteyn
thật kỳ lạ nhưng <<< toán tử và printf chức năng đang cho kết quả hoàn toàn khác nhau cho md5 băm! kết quả của printf là chính xác mặc dù! - Hamed Momeni
có vẻ như sử dụng <<< toán tử gửi một dòng mới đến md5sum! - Hamed Momeni
Vâng, đúng như tôi đã nói giữa ví dụ đầu tiên và thứ hai - enzotib


$ echo -n 123456 | md5sum | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e

bạn có thể tạo một kịch bản lệnh shell.

Ví dụ, tên kịch bản là md5.sh:

#!/bin/bash

echo   -n   $1 | md5sum | awk '{print $1}'

thực thi quyền:

 chmod +x md5.sh

Sau đó:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e

Nếu hệ thống của bạn là macOS. Bạn cần sửa đổi tập lệnh này:

$ echo -n 123456 | md5 | awk '{print $1}' 
e10adc3949ba59abbe56e057f20f883e

21
2018-03-09 04:54



Điều này chỉ là quá dài. - Gucho Ca
thay thế cho awk: cut -d ' ' -f 1 - Blauhirn


Chạy md5sum không có đối số nào sẽ khiến nó đọc đầu vào từ terminal. Nhập hoặc dán bất kỳ thứ gì bạn muốn và khi bạn hoàn tất, nhấn ctrl-d để kết thúc đầu vào.


9
2017-07-27 15:46



vâng, bạn cũng đúng. nhưng ctrl+d cần phải được nhấn hai lần để nó hoạt động. - Hamed Momeni
@ James, nếu nó không theo một dòng mới, có. Nếu bạn nhấn nó sau khi nhấn enter, nó chỉ cần một lần. Khi nó không theo một dòng mới, nó chỉ buộc tất cả các ký tự được gõ trên dòng cho đến nay để được xử lý ngay lập tức thay vì chờ đợi một dòng mới. - psusi


openssl md5 filename
openssl sha1 filename

Đối với chuỗi ký tự, nội dung sử dụng echo

echo -n 123456 | openssl md5

8
2017-12-10 11:13





Tôi nhanh chóng chọc vào --help cho md5sum chứng minh rằng lệnh:

md5sum -

sau đó sẽ đưa ra lời nhắc cho đầu vào đơn giản. Nhập một số văn bản và sau đó sử dụng Đi vào và sau đó Ctrl+D để biểu thị kết thúc tệp thì nguyên nhân md5sum để nhổ ra MD5 của văn bản thô bạn đã nhập (bao gồm cả Đi vào, đó là CR, IIRC).

Ít hơn để loại và không có đường ống! Và tránh mật khẩu của bạn được ghi lại trong lịch sử shell! Woo!

Nếu bạn không muốn có dấu vết CR (thường là trường hợp nếu bạn muốn băm mật khẩu), đừng nhấn Đi vào trước Ctrl+D, đi vào Ctrl+D hai lần thay thế.


3
2017-08-21 06:00





Trong kịch bản của tôi, tôi thấy rằng có 2 điều bạn nên biết về vấn đề này.

  • Nó không quan trọng nếu bạn làm echo "$myvariable" hoặc là echo -n "$myvariable" nhưng bạn nên luôn sử dụng các doubleqoutes cho các chuỗi và luôn sử dụng cùng một phương thức. nếu không phải mọi thứ sẽ không khớp.
  • trong đầu ra, bạn luôn nhận được khoảng trắng và dấu gạch ngang như trong ví dụ:

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

để loại bỏ điều đó và chỉ ở lại với mã 7803ffcaea43bb81a439fde13b29bc35, làm: echo "$myvariable" | md5sum | cut -d" " -f1


2
2017-08-02 13:39



Đừng quên -n tham số ở đây để tránh xuất dòng mới, điều này sẽ dẫn đến sai md5: echo -n $myvariable | md5sum | cut -d" " -f1 - derFunk