2015-07-11 104 views
-1

我正在嘗試將下面的python腳本翻譯爲R,但我遇到了困難,它反映了我對Python或R不熟悉的事實。如何將Python中的哈希函數轉換爲R

這裏是我的Python:

import hashlib, hmac 
print hmac.new('123456', 'hello'.encode('utf-8'),hashlib.sha256).digest() 

當我運行這在Python,我得到一個消息,說標準輸出爲空。

問題:我在做什麼錯?

下面是我使用的是什麼樣的R

library('digest') 
hmac('123456','hello', algo='sha256', serialize=FALSE) 

我的問題了R代碼爲:

  1. 如何編碼成UTF-8 R.我找不到包。
  2. 什麼是正確的參數設置serialize和原始的R給定我想匹配上面的Python函數(一旦它的工作)的輸出。

回答

2

如果要獲取R中散列的字節,請設置raw=TRUE。然後,你可以寫出來的二進制罰款

library('digest') 
x <- hmac('123456', enc2utf8('hello'), algo='sha256', serialize=FALSE, raw=TRUE) 
writeBin(x, "Rout.txt") 

如果你不輸出文本,編碼無所謂。這些是原始字節。輸出中唯一不同的是Python打印似乎正在添加一個新的行字符。如果我hexdump都在R文件,我看到

0000000 ac 28 d6 02 c7 67 42 4d 0c 80 9e de bf 73 82 8b 
0000010 ed 5c e9 9c e1 55 6f 4d f8 e2 23 fa ee c6 0e dd 
+0

實際上,我試圖創建亞馬遜AWS簽名的簽名,我試圖按照此作爲一個例子:HTTP://docs.aws.amazon。 com/general/latest/gr/sigv4-signed-request-examples.html – Mutuelinvestor

+0

那麼這是如何產生影響的呢? – MrFlick

+0

我認爲這可能會阻止編碼。這個例子似乎需要四個不同的字符串,並建立到最後的簽名。我相信前三個是Raw,最後一個轉換爲十六進制。 – Mutuelinvestor