Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyemak hash go.mod dalam sum.golang.org menggunakan Python?

Bagaimana untuk menyemak hash go.mod dalam sum.golang.org menggunakan Python?

王林
王林ke hadapan
2024-02-09 12:10:08841semak imbas

如何使用 Python 检查 sum.golang.org 中的 go.mod 哈希值?

editor php Xigua di sini untuk memperkenalkan cara menggunakan Python untuk menyemak nilai cincang go.mod dalam sum.golang.org. sum.golang.org ialah perkhidmatan rasmi untuk mengesahkan cincangan modul Go, yang membantu pembangun memastikan integriti dan keselamatan modul mereka. Dengan menggunakan perpustakaan permintaan Python dan perpustakaan hashlib, kami boleh mendapatkan dan membandingkan nilai cincang fail go.mod dengan mudah untuk memastikan modul yang kami gunakan boleh dipercayai. Mari kita lihat langkah pelaksanaan khusus di bawah.

Kandungan soalan

Saya perlu mengesahkan cincangan fail go.mod yang disediakan oleh sum.golang.org. Saya perlu menggunakan PYTHON.

Contohnya - https://sum.golang.org/lookup/github.com/gin-gonic/ [emel dilindungi] Fail https://proxy.golang.org/github.com/gin-gonic/ gin //v/v1.6.2.mod

Kami di sini:

import base64
import requests
import hashlib
import os

# some tmp file
tmp_file = os.path.abspath(os.path.dirname(__file__)) + '/tmp.mod'

# url for sumdb
link_sum_db = 'https://sum.golang.org/lookup/github.com/gin-gonic/[email protected]'
# our line:
# github.com/gin-gonic/gin v1.6.2/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
hash_from_sumdb = b'75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M='
print(hash_from_sumdb)
# b'75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M='

# download the file
f_url = 'https://proxy.golang.org/github.com/gin-gonic/gin/@v/v1.6.2.mod'
f_url_content = requests.get(f_url).content
with open(tmp_file, 'wb') as f:
    f.write(f_url_content)

with open(tmp_file, 'rb') as f:
    f_file_content = f.read()

# calculate hash from local tmp file
hash_from_file = base64.b64encode(hashlib.sha256(f_file_content).digest())
print(hash_from_file)
# b'x9T1RkIbnNSJydQMU9l8mvXfhBIkDhO3TTHCbOVG4Go='
# and it fails =(
assert hash_from_file == hash_from_sumdb

Tolong bantu saya. Saya tahu tentang arahan go tetapi saya perlu menggunakan python di sini... Saya telah membaca benang ini tetapi tidak membantu =(

Penyelesaian

Segala perkara kelihatan lebih rumit daripada itu. Saya mengikuti topik yang anda nyatakan dan mendapati jawapan ini. Selain itu, jika anda merujuk kepada kod sumber fungsi ini, anda boleh melihat cara cincang yang digunakan dalam modul go dilaksanakan.

Versi ini sah:

import hashlib
import base64

def calculate_sha256_checksum(data):
    sha256_hash = hashlib.sha256()
    sha256_hash.update(data.encode('utf-8'))
    return sha256_hash.digest()

# Specify the file path
file_path = 'go.mod'

# Read the file content
with open(file_path, 'r') as file:
    file_content = file.read()

# Calculate the SHA256 checksum of the file content
checksum1 = calculate_sha256_checksum(file_content)

# Format the checksum followed by two spaces, filename, and a new line
formatted_string = f'{checksum1.hex()}  {file_path}\n'

# Calculate the SHA256 checksum of the formatted string
checksum2 = calculate_sha256_checksum(formatted_string)

# Convert the checksum to base64
base64_checksum = base64.b64encode(checksum2).decode('utf-8')

print(base64_checksum)

Atas ialah kandungan terperinci Bagaimana untuk menyemak hash go.mod dalam sum.golang.org menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam