下面给出了两个python函数
import sys, os, base64, datetime, hashlib, hmac
def sign(key, msg):
return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
def getSignatureKey(key, datestamp, regionName, serviceName):
kDate = sign(('AWS4' + key).encode('utf-8'), datestamp)
kRegion = sign(kDate, regionName)
kService = sign(kRegion, serviceName)
kSigning = sign(kService, 'aws4_request')
return kSigning
我想把它们转换成R函数
这是我试过的
library(digest)
sign=function(key, msg)
{
return (digest(hmac(key,enc2utf8(msg),"sha256", raw=F)))
}
getSignatureKey=function(key, datestamp, regionName, serviceName)
{
kDate = sign(enc2utf8(paste0('AWS4' , key)), datestamp)
kRegion = sign(kDate, regionName)
kService = sign(kRegion, serviceName)
kSigning = sign(kService, 'aws4_request')
return (kSigning)
}
考虑到以下输入
key = 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY'
datestamp = '20120215'
regionName = 'us-east-1'
serviceName = 'iam'
下面给出了预期的输出(根据python函数)
kSecret = '41575334774a616c725855746e46454d492f4b374d44454e472b62507852666943594558414d504c454b4559'
kDate = '969fbb94feb542b71ede6f87fe4d5fa29c789342b0f407474670f0c2489e0a0d'
kRegion = '69daa0209cd9c5ff5c8ced464a696fd4252e981430b10e3d3fd8e2f197d7a70c'
kService = 'f72cfd46f26bc4643f06a11eabb6c0ba18780c19a8da0c31ace671265e3c87fa'
kSigning = 'f4780e2d9f65fa895f9c67b32ce1baf0b0d8a43505a000a1a9e090d414db404d'
很遗憾,我无法在R中生成上述值
我想了解R函数中的错误是什么
这里有更多的细节,以防您想了解这是从哪里来的(https://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-other)
我能弄明白这一点
对于第一个函数,它不需要摘要,并保留参数raw=t
下面给出了第二个函数,其中添加了一行,用于将字节向量转换为字符串
出于某种原因,保留函数中的参数,hmac函数中的raw=F将函数2中后续的签名操作弄乱了。因此,保留raw=T并使用粘贴最终使其成为字符串
相关问题 更多 >
编程相关推荐