亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算正弦的 MD5 整數部分時遇到問題

計算正弦的 MD5 整數部分時遇到問題

Go
繁星coding 2022-05-23 14:47:43
我正在使用 MD5 實現,并使用 wikipedia 上的偽代碼為整數正弦的二進制部分編寫以下代碼。我發現我的輸出與廣泛可用的預計算表之間存在差異。我試圖弄清楚我的代碼是否不正確或維基百科上的偽代碼不正確。在下面的代碼中替換math.Floor為math.Ceil修復了預計算表和我的輸出之間的差異。package mainimport "fmt"import "math"func main() {        var i float64        for i < 64 {                x := uint(math.Floor(float64(math.MaxUint32) * math.Abs(math.Sin(i+1))))                fmt.Printf("%d : %x\n", uint(i+1), x)                i = i + 1        }}1 : d76aa4772 : e8c7b7553 : 242070db4 : c1bdceee第 1 行和第 2 行與預先計算的表不同,而第 3 行是一致的。
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

問題是math.MaxUint32哪個是一個接一個!也就是說,2 32 -1 而不是 2 32。

但無論如何,最簡單/最快/常見/最好的選擇是使用預先計算的表。

最終的 MD5 規范是RFC 1321

the integer part of 4294967296 times abs(sin(i)), where i is in radians.

其中“整數部分”應理解為底函數。當然,在適當的精度下floor(abs(sin)),它給出了 RFC 表中的數字。在這里,每個條目重新格式化為 8 個十六進制數字,并與Wolfram 的 Alpha吐出的內容進行了交叉檢查BaseForm[Floor[Abs[2^32 Sin[Range[64]]]],16]

d76aa478 e8c7b756 242070db c1bdceee f57c0faf 4787c62a a8304613 fd469501 698098d8 8b44f7af ffff5bb1 895cd7be 6b901122 fd987193 a679438e 49b40821 f61e2562 c040b340 265e5a51 e9b6c7aa d62f105d 02441453 d8a1e681 e7d3fbc8 21e1cde6 c33707d6 f4d50d87 455a14ed a9e3e905 fcefa3f8 676f02d9 8d2a4c8a fffa3942 8771f681 6d9d6122 fde5380c a4beea44 4bdecfa9 f6bb4b60 bebfbc70 289b7ec6 eaa127fa d4ef3085 04881d05 d9d4d039 e6db99e5 1fa27cf8 c4ac5665 f4292244 432aff97 ab9423a7 fc93a039 655b59c3 8f0ccc92 ffeff47d 85845dd1 6fa87e4f fe2ce6e0 a3014314 4e0811a1 f7537e82 bd3af235 2ad7d2bb eb86d391



查看完整回答
反對 回復 2022-05-23
  • 1 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號