Jika Anda menjalankan perintah ini di Unix Anda
echo -n "foo" | openssl dgst -sha1
Anda akan mendapatkan hasil ini:
(stdin)= 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
(diikuti oleh baris baru).
Bagaimana saya bisa memaksa openssl untuk tidak menunjukkan (stdin)=
awalan, dan menghindari baris baru yang tertinggal?
Jawaban:
Format biner mentah tidak menambahkan output asing.
Output sebagai biner kemudian dikonversi ke hex:
Akan memberi Anda ini:
Metode ini harus menjadi bukti di masa depan jika seseorang memutuskan untuk mengubah format output tekstual lagi. Saya yakin mereka akan memperbaiki awalan menjadi "SHA1 (stdin) =" agar konsisten dengan input file.
Saya tidak percaya mereka mengubah ini! Saya bertanya-tanya berapa banyak skrip yang rusak.
sumber
-c 256
opsi untuk memperpanjangnya hingga 256 oktet per baris.Saya mengamati perilaku ini di bawah OpenSSL 1.0.0e pada Ubuntu 11.10, sedangkan OpenSSL 0.9.8k dan 0.9.8t hanya keluaran hash. Baris perintah OpenSSL tidak dirancang untuk menjadi fleksibel, ini lebih merupakan cara cepat dan kotor untuk melakukan perhitungan kriptografi dari baris perintah.
Jika Anda ingin menggunakan OpenSSL, filter output:
Di Linux (dengan alat GNU atau BusyBox), Anda dapat menggunakan
sha1sum
, yang tidak memerlukan OpenSSL untuk diinstal dan memiliki format output yang stabil. Itu selalu mencetak nama file, jadi cabut itu.Pada sistem BSD termasuk OSX, Anda dapat menggunakan
sha1
.Semua ini menghasilkan checksum dalam heksadesimal diikuti oleh baris baru. Teks di bawah sistem unix selalu terdiri dari urutan garis, dan setiap baris berakhir dengan karakter baris baru. Jika Anda menyimpan output dari perintah dalam variabel shell, baris akhir terakhir dilucuti.
Jika Anda perlu menyalurkan input ke program yang membutuhkan checksum tanpa baris akhir final (yang sangat jarang), lepas jalur baru.
sumber
Berikut alternatif lain:
sumber
Berikut cara untuk melakukannya menggunakan bash built-in alih-alih pipa, awk, sed, tr, cut, dll:
sumber