0

我正在使用 Alteryx R 工具进行一些 sha256 哈希计算,但我的输入之一遇到了麻烦。我正在尝试为以下输入生成 sha256 哈希:

POST\n/\n\ncontent_type:\nhost:dynamodb.us-east-1.amazonaws.com\nx-amz-date:20150707T201951Z\nx-amz-target:DynamoDB_20120810.CreateTable\n\ncontent_type;host;x-amz-date;x-amz-target\n09a8bcdeea1d20631f887235820bbff0a614679080a2e74a89ceb1a1bcc71b44

我的 r 函数是:

 digest('POST\n/\n\ncontent_type:\nhost:dynamodb.us-east-1.amazonaws.com\nx-amz-date:20150707T201951Z\nx-amz-target:DynamoDB_20120810.CreateTable\n\ncontent_type;host;x-amz-date;x-amz-target\n09a8bcdeea1d20631f887235820bbff0a614679080a2e74a89ceb1a1bcc71b44', algo='sha256', serialize = FALSE)

R产生的散列是:

7fe2c3fc70134481217952f27bb5f4af95193645903ba3a6d4d7ad45c3adade1

这个值是不正确的。正确的值为:

9a493c643eeb736decc195a8e0e84e08f45a00bdbc21feaafa94be5f0f299af0

您可以看到下面使用 Python 计算的正确值;

用 Python 计算

我还使用 R 命令行工具计算了正确的值。这让我相信 Alteryx 以某种方式改变了输入,因此产生了错误的输出。有没有人遇到过这个或知道可能的解决方法。

我的 R 工具脚本如下:

在此处输入图像描述

其中 c =

POST\n/\n\ncontent_type:\nhost:dynamodb.us-east-1.amazonaws.com\nx-amz-date:20150707T201951Z\nx-amz-target:DynamoDB_20120810.CreateTable\n\ncontent_type;host;x-amz-date;x-amz-target\n09a8bcdeea1d20631f887235820bbff0a614679080a2e74a89ceb1a1bcc71b44
4

1 回答 1

0

如果您将输入字符串中的 all 替换\\\(在常规 R 或 Python 中),它将digest以“7fe ...”开头的值,因此这表明 Alteryx 在移交给 R 时确实在做类似的事情。

一种解决方法是在 R 工具之前通过 Alteryx base64 工具运行它,然后让 R 工具 base 64 解码,例如:

library("digest")
library("caTools")
df <- as.data.frame(read.Alteryx("#1", mode="data.frame"))
df$out <- digest(base64decode(as.character(df$b64),what="character"), algo='sha256', serialize = FALSE)
write.Alteryx(df, 1)

虽然不理想,但它会给出以“9a493...”开头的正确输出

于 2017-01-23T17:51:04.550 回答