racket plt是否具有与Python';s sha1.update()

racket plt是否具有与Python';s sha1.update(),racket,sha,Racket,Sha,我想使用racket对stdin进行分块散列,但找不到与Python的hashlib的sha1.update函数等效的函数。有没有等效的或替代的函数?看看的库,它通过为SHA-1和SHA-2的OpenSSL实现提供racket接口,为SHA-1和SHA-2添加了racket支持 (require sha) (sha1 bstr) -> sha1? bstr : bytes? 尽管它没有update()过程,但正如Python自己的调用中所述,调用如下: m.update(a

我想使用racket对stdin进行分块散列,但找不到与Python的hashlib的sha1.update函数等效的函数。有没有等效的或替代的函数?

看看的库,它通过为SHA-1和SHA-2的OpenSSL实现提供racket接口,为SHA-1和SHA-2添加了racket支持

(require sha)

(sha1 bstr) -> sha1?    
  bstr : bytes?
尽管它没有
update()
过程,但正如Python自己的调用中所述,调用如下:

m.update(a); m.update(b)
(define c (make-digest-context 'sha1))
(define in (open-input-file "foo"))
(let loop ()
  (define chunk (read-bytes 4096 in))
  (cond [(eof-object? chunk) (final-context->hex-string c)]
        [else                (update-context c chunk)
                             (loop)]))
相当于:

m.update(a+b)
看看的库,它通过为SHA-1和SHA-2的OpenSSL实现提供一个Racket接口,为SHA-1和SHA-2添加了Racket支持

(require sha)

(sha1 bstr) -> sha1?    
  bstr : bytes?
尽管它没有
update()
过程,但正如Python自己的调用中所述,调用如下:

m.update(a); m.update(b)
(define c (make-digest-context 'sha1))
(define in (open-input-file "foo"))
(let loop ()
  (define chunk (read-bytes 4096 in))
  (cond [(eof-object? chunk) (final-context->hex-string c)]
        [else                (update-context c chunk)
                             (loop)]))
相当于:

m.update(a+b)

以下是一种方法:

#lang racket
(require (planet soegaard/digest:1:2/digest))

(define a #"The quick brown fox jumps ")
(define b #"over the lazy dog")
(define a+b (bytes-append a b))

(digest a+b 'sha1)

(define c (make-digest-context 'sha1))
(update-context c a)
(update-context c b)
(final-context->hex-string c)
输出为:

"2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"
"2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"
您可以在这里找到
摘要
集合中的文档:

可以这样使用它:

m.update(a); m.update(b)
(define c (make-digest-context 'sha1))
(define in (open-input-file "foo"))
(let loop ()
  (define chunk (read-bytes 4096 in))
  (cond [(eof-object? chunk) (final-context->hex-string c)]
        [else                (update-context c chunk)
                             (loop)]))

以下是一种方法:

#lang racket
(require (planet soegaard/digest:1:2/digest))

(define a #"The quick brown fox jumps ")
(define b #"over the lazy dog")
(define a+b (bytes-append a b))

(digest a+b 'sha1)

(define c (make-digest-context 'sha1))
(update-context c a)
(update-context c b)
(final-context->hex-string c)
输出为:

"2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"
"2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"
您可以在这里找到
摘要
集合中的文档:

可以这样使用它:

m.update(a); m.update(b)
(define c (make-digest-context 'sha1))
(define in (open-input-file "foo"))
(let loop ()
  (define chunk (read-bytes 4096 in))
  (cond [(eof-object? chunk) (final-context->hex-string c)]
        [else                (update-context c chunk)
                             (loop)]))

这不需要我将以前读取的所有字节都保存在内存中吗?如果我正在读取一个千兆字节大小的文件,这将是不实际的,或者我误解了?不,上下文不存储输入字节。它使用很少的内部状态。请参阅添加的示例。这不需要我将以前读取的所有字节保留在内存中吗?如果我正在读取一个千兆字节大小的文件,这将是不实际的,或者我误解了?不,上下文不存储输入字节。它使用很少的内部状态。请参见添加的示例。