Heim  >  Artikel  >  Backend-Entwicklung  >  Wie überprüfe ich go.mod-Hashes in sum.golang.org mit Python?

Wie überprüfe ich go.mod-Hashes in sum.golang.org mit Python?

王林
王林nach vorne
2024-02-09 12:10:08841Durchsuche

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

php-Editor Xigua ist hier, um vorzustellen, wie man mit Python den go.mod-Hash-Wert in sum.golang.org überprüft. sum.golang.org ist ein offizieller Dienst zur Überprüfung von Hashes von Go-Modulen, der Entwicklern hilft, die Integrität und Sicherheit ihrer Module sicherzustellen. Mithilfe der Anforderungsbibliothek und der Hashlib-Bibliothek von Python können wir den Hashwert der Datei go.mod problemlos abrufen und vergleichen, um sicherzustellen, dass das von uns verwendete Modul vertrauenswürdig ist. Werfen wir einen Blick auf die konkreten Umsetzungsschritte weiter unten.

Frageninhalt

Ich muss den Hash der von sum.golang.org bereitgestellten go.mod-Datei überprüfen. Ich muss PYTHON verwenden.

Zum Beispiel – https://sum.golang.org/lookup/github.com/gin-gonic/ [email protected] Datei https://proxy.golang.org/github.com/gin-gonic/ gin /@v/v1.6.2.mod

Wir sind hier:

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

Bitte hilf mir. Ich kenne den Befehl go, aber ich muss hier Python verwenden ... Ich habe diesen Thread gelesen, aber es hat nicht geholfen =(

Workaround

Die Dinge scheinen etwas komplizierter zu sein. Ich habe das von Ihnen erwähnte Thema verfolgt und diese Antwort gefunden. Wenn Sie sich außerdem den Quellcode dieser Funktion ansehen, können Sie sehen, wie der im Go-Modul verwendete Hash implementiert ist.

Diese Version ist gültig:

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)

Das obige ist der detaillierte Inhalt vonWie überprüfe ich go.mod-Hashes in sum.golang.org mit Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen