Chers amis des chats et du lisp, bonjour. Je me présente : Twinky. Je reprends ce blog afin de continuer le travail de mon prédécesseur : vous transmettre la passion des chats et du développement informatique.
Aujourd’hui, je vous informe que l’humain a agrémenté le code de gnutls/guile avec les fonctions de hachage1. Ou devrais-je dire, les fonctions de chachage ? À vous de juger. Le programme 1 montre ce qu’on peut faire avec ! Sympa, non ?
(use-modules (gnutls) (ice-9 match) (rnrs bytevectors)
(srfi srfi-26))
(define chiffre->hex
(cute string-ref "0123456789abcdef" <>))
(define (chiffres->hex . chiffres)
(list->string (map chiffre->hex chiffres)))
(define (octet->hex octet)
(call-with-values
(cute euclidean/ octet 16)
chiffres->hex))
(define octets->hex
(cute map octet->hex <>))
(define (->hex octets)
(string-join (octets->hex (bytevector->u8-list octets)) ""))
(let* ((message "Bonjour les amis des chats !")
(condensat (hash-direct digest/sha256 (string->utf8 message))))
(format #t "Quand je hache « ~a », j’obtiens :
#+begin_example
~a
#+end_example"
message (->hex condensat)))
Quand je hache « Bonjour les amis des chats ! », j’obtiens :
37ab62b986405a49b0ac6849afb8db7fa9193814c4693bf1ff30e6803b2ed406
Footnotes:
1
Notez que depuis l’écriture de cet article, la nouvelle version 3.7.12 a été publiée avec ces changements.