Maison  >  Article  >  développement back-end  >  Comment vérifier les hachages go.mod dans sum.golang.org en utilisant Python ?

Comment vérifier les hachages go.mod dans sum.golang.org en utilisant Python ?

王林
王林avant
2024-02-09 12:10:08846parcourir

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

L'éditeur php Xigua est là pour vous présenter comment utiliser Python pour vérifier la valeur de hachage go.mod dans sum.golang.org. sum.golang.org est un service officiel de vérification des hachages des modules Go, qui aide les développeurs à garantir l'intégrité et la sécurité de leurs modules. En utilisant la bibliothèque de requêtes et la bibliothèque hashlib de Python, nous pouvons facilement obtenir et comparer la valeur de hachage du fichier go.mod pour garantir que le module que nous utilisons est digne de confiance. Jetons un coup d'œil aux étapes de mise en œuvre spécifiques ci-dessous.

Contenu de la question

Je dois vérifier le hachage du fichier go.mod fourni par sum.golang.org. Je dois utiliser PYTHON.

Par exemple - https://sum.golang.org/lookup/github.com/gin-gonic/ [email protected] Fichier https://proxy.golang.org/github.com/gin-gonic/ gin /@v/v1.6.2.mod

Nous sommes là :

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

S'il vous plaît, aidez-moi. Je connais la commande go mais je dois utiliser python ici... J'ai lu ce fil mais cela n'a pas aidé =(

Solution de contournement

Les choses semblent un peu plus compliquées que ça. J'ai suivi le fil de discussion que vous avez mentionné et j'ai trouvé cette réponse. De plus, si vous vous référez au code source de cette fonction, vous pourrez voir comment le hachage utilisé dans le module go est implémenté.

Cette version est valable :

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)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer