Tổng kiểm tra Python SHA256

Trước khi viết mã Python để xác minh Merkle Root trong khối Bitcoin, chúng ta cần làm quen với hai mô-đun Python cần thiết để tính hàm băm SHA256

  • mô-đun "hashlib" - Cung cấp cho chúng tôi các hàm băm SHA56
  • Module "binascii" - Cung cấp cho chúng ta các hàm chuyển đổi dữ liệu giữa định dạng nhị phân và hex

Đây là tập lệnh Python của tôi để thực hiện hàm băm SHA256 và hàm băm Double-SHA256 trên 3 vectơ kiểm tra

#- Double-SHA256-Test-Vectors.py
#- Copyright [c] 2018, HerongYang.com, All Rights Reserved.

import hashlib
import binascii
 
def doubleSha256[hex]: 
   bin = binascii.unhexlify[hex]
   hash = hashlib.sha256[bin].digest[]
   hash2 = hashlib.sha256[hash].digest[]
   print["Input Hex: "+str[hex,"ascii"]]
   print["SHA256:\n   "+str[binascii.hexlify[hash],"ascii"]]
   print["Double-SHA256:\n   "+str[binascii.hexlify[hash2],"ascii"]]

print["\nTest 1:"]
ascii = "null"
hex = b"00"
print["Input ASCII: "+ascii]
doubleSha256[hex]

print["\nTest 2:"]
ascii = "abc"
hex = binascii.hexlify[bytes[ascii,"ascii"]]
print["Input ASCII: '"+ascii+"'"]
doubleSha256[hex]

print["\nTest 2:"]
ascii = "The quick brown fox jumps over the lazy dog"
hex = binascii.hexlify[bytes[ascii,"ascii"]]
print["Input ASCII: '"+ascii+"'"]
doubleSha256[hex]

Đầu ra có vẻ tốt. Các giá trị SHA256 phù hợp tốt với các thử nghiệm được công bố trên Internet

E:\herong\bitcoin_20080000\cod>python Double-SHA256-Test-Vectors.py

Test 1:
Input ASCII: null
Input Hex: 00
SHA256:
   6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d
Double-SHA256:
   1406e05881e299367766d313e26c05564ec91bf721d31726bd6e46e60689539a

Test 2:
Input ASCII: 'abc'
Input Hex: 616263
SHA256:
   ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
Double-SHA256:
   4f8b42c22dd3729b519ba6f68d2da7cc5b2d606d05daed5ad5128cc03e6c6358

Test 2:
Input ASCII: 'The quick brown fox jumps over the lazy dog'
Input Hex: 54686520717569636b2062726f776e20666f78206a756d7073206f76657220746
           865206c617a7920646f67
SHA256:
   d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
Double-SHA256:
   6d37795021e544d82b41850edf7aabab9a0ebe274e54a519840c4666f35b3937

Mục lục

Về cuốn sách này

Giới thiệu Bitcoin

chuỗi khối bitcoin

ví tiền Bitcoin

lõi bitcoin

giao dịch bitcoin

Bitcoin-Qt - GUI Bitcoin Core

khai thác bitcoin

Quy tắc đồng thuận bitcoin

►Cấu trúc dữ liệu khối Bitcoin

Thành phần dữ liệu của khối Bitcoin

Thuộc tính dữ liệu của khối Bitcoin

Merkle Root của Khối Bitcoin

►Tính toán Băm đôi SHA256 bằng Python

Xác minh Merkle Root của 2 giao dịch

Xác minh Merkle Root của 7 giao dịch

Cấu trúc dữ liệu của khối Bitcoin

"getblock blockhash 0" - Dữ liệu khối hex được tuần tự hóa

Thuật toán tính toán băm khối

Tính toán khối băm trong Python

Tính Hash Double-SHA256 bằng Java

Cấu trúc dữ liệu giao dịch bitcoin

API chuỗi khối Bitcoin

Đồng thanh toán - Ví Bitcoin

Hướng dẫn đã lưu trữ

Người giới thiệu

Phiên bản đầy đủ ở định dạng PDF/EPUB

Hướng dẫn này cho thấy cách đơn giản nhất để tính tổng kiểm tra. Nó chia sẻ một hàm Python xử lý các hàm băm MD5 và SHA256 có thể được sử dụng để kiểm tra tính toàn vẹn của [các] tệp của bạn

1. Tổng kiểm tra là gì?

Nếu bạn đang ở trong thế giới của máy tính và tại sao không, thậm chí cả an ninh mạng, bạn có thể đã nghe thấy thuật ngữ tổng kiểm soát được ném ra đây đó. Tổng kiểm soát là một dãy số và chữ cái được sử dụng để kiểm tra dữ liệu lỗi. Nếu bạn biết tổng kiểm tra cho một tệp gốc, bạn có thể sử dụng tiện ích kiểm soát tổng để xác nhận rằng bản sao của bạn giống hệt nhau. Để tạo tổng kiểm tra, bạn chạy chương trình đặt tệp này thông qua thuật toán. Thuật toán sử dụng hàm băm mật mã nhận đầu vào và tạo ra một chuỗi [một chuỗi số và chữ cái] có độ dài cố định. Tệp đầu vào có thể là tệp nhỏ 1 MB hoặc tệp lớn 4GB, nhưng trong mọi trường hợp, bạn sẽ nhận được tổng kiểm soát có cùng độ dài. Tổng kiểm soát cũng có thể được gọi là "băm"

Khi kiểm tra hữu ích Bạn có thể sử dụng tổng kiểm soát để kiểm tra tệp và dữ liệu khác để tìm lỗi xảy ra trong quá trình truyền hoặc lưu trữ. Ví dụ: một tệp có thể không được tải xuống chính xác do sự cố mạng hoặc sự cố đĩa cứng có thể khiến tệp trên đĩa bị hỏng. Máy tính sử dụng các kỹ thuật tổng kiểm soát để kiểm tra dữ liệu nhằm tìm kiếm các sự cố trong nền, nhưng bạn cũng có thể tự mình làm điều đó. Bạn cũng có thể sử dụng tổng kiểm soát để xác minh tính toàn vẹn của bất kỳ loại tệp, ứng dụng nào đối với tài liệu và phương tiện. Điều khá quan trọng cần đề cập là tổng kiểm soát này không xảy ra đơn giản vì nó được tạo bởi một phép toán gọi là hàm tổng kiểm soát. Tuy nhiên, bạn cũng có thể gặp anh ta dưới dạng thuật toán tổng kiểm soát, chỉ để bạn biết điều đó. Thiết kế của thuật toán có thể khác nhau, nhưng nói chung, thuật toán tổng kiểm soát hiệu quả phải tạo ra giá trị khác biệt đáng kể [tổng kiểm soát], ngay cả đối với những thay đổi nhỏ nhất được thực hiện đối với mục nhập, bất kể loại tài liệu hoặc dữ liệu nào

1. 1. Từ chẵn lẻ hoặc byte chẵn lẻ

Chúng tôi bắt đầu với thuật toán tổng kiểm soát đơn giản nhất, hay còn gọi là kiểm soát chẵn lẻ theo chiều dọc. Hoạt động của thuật toán này là chia dữ liệu thành các từ có số bit cố định [n], sau đó tính “hoặc” [XOR] loại trừ của tất cả các từ mà nó vừa được xử lý. Kết quả của phép tính này được thêm vào thông báo dưới dạng một từ bổ sung

Để xác minh tính toàn vẹn của tin nhắn, người nhận tính toán “hoặc loại trừ” [XOR] của tất cả các từ, bao gồm tổng kiểm soát và kiểm tra xem kết quả có phải là một từ bao gồm [n] số không hay không. Nếu đây là trường hợp, mọi thứ đều ổn, nhưng nếu không, nó sẽ biết rằng đã xảy ra lỗi ở đâu đó trong quá trình truyền

1. 2. Phần bổ sung

Như bạn có thể tưởng tượng, vì nó bị lỗi nên đã có một nỗ lực để hoàn thiện thuật toán được đề cập và mô tả ở trên, vì vậy thuật toán bổ sung tổng đã được thiết kế. Không giống như thuật toán điều khiển chẵn lẻ, phần bổ sung tổng đã thêm tất cả các “từ” ở dạng số nhị phân không dấu, đồng thời loại bỏ từng bit tràn, cũng như thêm phần bổ sung tổng vào hai dưới dạng điều khiển tổng. Để xác thực một tin nhắn, người nhận phải thêm tất cả các từ dưới dạng thuật toán kiểm soát chẵn lẻ theo chiều dọc, bao gồm cả kiểm tra. Nếu kênh kết quả không phải là một từ chứa đầy số không, thì đó là dấu hiệu rõ ràng cho thấy đã xảy ra lỗi truyền tại một thời điểm nhất định

1. 3. Theo vị trí

Thuật toán điều khiển phụ thuộc vào vị trí nhằm sửa các lỗi của hai chức năng được mô tả ở trên vì chúng không có khả năng phát hiện chính xác nhiều lỗi phổ biến có thể xảy ra trong hơn một bit. Một số ví dụ về các lỗi phổ biến này bao gồm việc chèn hoặc xóa các từ có tất cả các bit được đặt thành 0, cũng như sửa đổi thứ tự của các từ dữ liệu

1. 4. Tổng kiểm soát mờ

Loại thuật toán tổng kiểm soát này đã được phát triển như một cách hiệu quả để phát hiện thư rác qua e-mail. Hoạt động của chức năng này là tạo cơ sở dữ liệu hợp tác từ một số ISP. Những cơ sở dữ liệu này bao gồm các e-mail bị nghi ngờ hoặc bị báo cáo là thư rác. Tuy nhiên, vì nội dung của mỗi thư rác có thể rất khác so với nội dung sau, nó sẽ làm cho thuật toán tổng kiểm soát và kiểm tra thông thường không hiệu quả và do đó không đáng sử dụng. Đổi lại, việc sử dụng thuật toán kiểm tra mờ có thể giảm nội dung của một email tối thiểu, sau đó tính tổng kiểm soát như bình thường

1. 5. Làm thế nào để sử dụng tổng kiểm soát tập tin?

Nếu bạn thực sự nghiêm túc về sự an toàn của máy tính của mình và bạn hiểu sự nguy hiểm của việc tải xuống ngẫu nhiên các tệp ở bên trái và bên phải từ các trang web tải xuống, bạn có thể muốn sử dụng tổng kiểm soát để kiểm tra tính toàn vẹn của các tệp của mình trước khi tải xuống hoặc sao chép chúng . để có thể làm thiệt hại

2. tổng kiểm tra. MD5 và SHA256

Trước hết, hàm Python đơn giản bên dưới có thể được sử dụng để tính toán tổng kiểm tra cho các tệp bằng hàm băm MD5 và SHA26

# !/usr/bin/env python3
# -*- coding: utf-8 -*-


import hashlib


def get_checksum[filename, hash_function]:
    """Generate checksum for file baed on hash function [MD5 or SHA256].

    Args:
        filename [str]: Path to file that will have the checksum generated.
        hash_function [str]:  Hash function name - supports MD5 or SHA256

    Returns:
        str`: Checksum based on Hash function of choice.

    Raises:
        Exception: Invalid hash function is entered.

    """
    hash_function = hash_function.lower[]

    with open[filename, "rb"] as f:
        bytes = f.read[]  # read file as bytes
        if hash_function == "md5":
            readable_hash = hashlib.md5[bytes].hexdigest[]
        elif hash_function == "sha256":
            readable_hash = hashlib.sha256[bytes].hexdigest[]
        else:
            Raise["{} is an invalid hash function. Please Enter MD5 or SHA256"]

    return readable_hash

2. trường hợp thử nghiệm

Ngoài ra, tôi đã tải xuống một hình ảnh ngẫu nhiên trực tuyến và tính toán tổng kiểm tra cho các hàm băm MD5 và SHA256 bằng cách sử dụng hàm Python và để so sánh nó với hình ảnh được tạo bằng các lệnh Unix

import os

photo = "g_circle-300x300.png"
md5_result = get_checksum[photo, "md5"]
sha256_result = get_checksum[photo, "sha256"]

os.system["md5 {}".format[photo]]
print['Hash Function: MD5 - Filename: {}'.format[md5_result]]

os.system["shasum -a 256 {}".format[photo]]
print['Hash Function: SHA256 - Filename: {}'.format[sha256_result]]

mà in như

MD5 [g_circle-300x300.png] = 0100c08784ed0f8defa8c9156b45a97e
Hash Function: MD5 - Filename: 0100c08784ed0f8defa8c9156b45a97e
132124053114b94b46e421dbc4587a15e6962d812389d1705c66d431f1944b9e  g_circle-300x300.png
Hash Function: SHA256 - Filename: 132124053114b94b46e421dbc4587a15e6962d812389d1705c66d431f1944b9e

Cuối cùng nhưng không kém phần quan trọng, trong trường hợp bạn muốn tìm hiểu thêm về tổng kiểm tra, vui lòng xem video Youtube bên dưới

Nhiêu tai nguyên hơn

Đây là ba cuốn sách Python yêu thích của tôi trong trường hợp bạn muốn tìm hiểu thêm về nó

  • Sách dạy nấu ăn Python, ấn bản thứ ba của David Beazley và Brian K. Jones
  • Học Python, ấn bản thứ 5 Phiên bản thứ năm của Mark Lutz
  • Tài liệu tham khảo bỏ túi Python. Python trong túi của bạn bởi Mark Lutz

Phần kết luận

Tóm lại, tôi hy vọng hướng dẫn này hữu ích cho bạn. Hy vọng rằng bạn đã biết cách đơn giản để kiểm tra tính toàn vẹn của tệp cho MD5 và SHA256

Làm cách nào để tính hàm băm SHA256 trong Python?

Sử dụng hashlib Python để triển khai SHA256 .
encode[] được sử dụng để chuyển đổi chuỗi thành byte, nghĩa là chuỗi có thể được chuyển vào hàm sha256
hexdigest[] được sử dụng để chuyển đổi dữ liệu của chúng tôi sang định dạng thập lục phân

Làm cách nào để sử dụng thuật toán SHA256 trong Python?

Ví dụ. sử dụng sha256[] để tạo đối tượng băm SHA-256 . Bây giờ, bạn có thể cung cấp đối tượng này bằng các đối tượng giống như byte [thường là byte ] bằng phương thức update[]. Tại bất kỳ thời điểm nào, bạn có thể yêu cầu nó tóm tắt kết nối của dữ liệu được cung cấp cho nó cho đến nay bằng cách sử dụng các phương thức digest[] hoặc hexdigest[].

Cách tính SHA

Bạn có thể sử dụng Windows Powershell để tính tổng kiểm tra SHA-256 cho một tệp. .
Mở Windows Powershell. .
Nhập Get-FileHash theo sau là khoảng trắng
Kéo tệp ZIP đã tải xuống vào cửa sổ Windows Powershell sau lệnh Get-FileHash. .
nhấn nút Enter. .
So sánh giá trị băm được tính toán với giá trị băm ban đầu

Hexdigest trong Python là gì?

hexdigest[]. Trả về dữ liệu được mã hóa ở định dạng thập lục phân .

Chủ Đề