Heim > Backend-Entwicklung > Golang > 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?

王林
Freigeben: 2024-02-09 12:10:08
nach vorne
883 Leute haben es durchsucht

如何使用 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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage