這是我的問題。爲了兼容性的原因,我目前正在嘗試在PHP中實現一些加密標準。我現在正在使用的是SHA256和SHA512。他們都是相當直接的標準,我沒有這個問題。PHP中的大字符串按位操作
但是,SHA512需要按位操作64位整數。由於PHP可以只有32位整數(在編譯時),這就給我帶來了一個問題。我如何實現所需的按位功能(模,移,旋轉,添加,異或等),以便我保持兼容性和合理的性能水平...
我知道他們中的一些人用2 32位整數實現這些函數。但是,如何爲shift
和rotate
工作?
我想過的是以二進制形式存儲字符串(作爲字符串01010
)。這樣所有的按位操作將完全獨立於架構。但是這可能會導致性能下降,因爲它們在標準(以及圖書館的其他部分)中的使用非常頻繁。
所以我的問題是:我怎樣才能輕鬆地允許在32位PHP編譯中至少執行64位字符串操作,同時仍然保持每步合理的性能水平...?
呵呵,我的目標是便攜性在這裏,所以沒有擴展。其他庫我會考慮,但他們必須是便攜式...
您可以將64位數字視爲兩個32位數字,並在兩個數字之間調整「carry」部分。 – 2011-04-04 11:35:23
@Sal:當然。但那是一種PITA。我想如果這是我能做的最好的事情,那就這樣吧。但是,如果有更清晰的方式,我全都是耳朵...... – ircmaxell 2011-04-04 11:47:11
通過創建一個「BitString」對象來簡化功能,這個對象只是Ints數組的一個包裝器,有些功能可以按照Salman的說法進行。 – 2011-04-04 19:57:19