有没有办法在R包中混淆API密钥?

时间:2012-02-29 16:56:35

标签: r api api-key

我正在开发一个R包的消费者密钥和秘密。每个用户申请和获取他们自己都有点麻烦,并且确实没有必要,因为他们必须使用用户名/密码进行身份验证才能使用包功能。但是,我不允许在公开场合分享我的钥匙。有没有什么方法可以将密钥+秘密(或任何信息)隐藏在我的包源中,一旦它在CRAN上?我猜的答案是肯定的,但我想确保我不会错过其他想法。

更新:我预见的唯一滥用是在另一个应用程序中提取和使用密钥以最大限度地提高我的速率限制。但如果是这样,那么我可以删除它。但是我可能还有其他形式的虐待。也许我应该让每个人都申请自己的。

1 个答案:

答案 0 :(得分:3)

只要您意识到混淆不是安全性,就有一些简单的方法可以进行混淆。您没有指定密钥的存储方式,因此我假设它们以二进制形式存储在文件中。

最简单的混淆是xor有一些价值 - 我会使用“DEADBEEF”,因为它听起来很美味:

keyFile <- "c:/foo.bin"
obfuscatedKey <- readBin(keyFile, "raw", file.info(keyFile)$size)
key <- xor(obfuscatedKey , as.raw(c(0xde, 0xad, 0xbe, 0xef))) # xor with DEADBEEF

由于xor是对称的,因此也可以使用相同的代码从原始密钥创建obfuscatedKey。

另一种方法是加扰矢量。通过使用具有“秘密”种子的随机数发生器(42),密钥被混淆:

# obfuscate
key <- 101:110
n <- length(key)
set.seed(42, "Mersenne-Twister") # To get the same permutation
perm <- sample.int(n)
obfuscatedKey <- key[perm]

# unobfuscate
orgKey <- integer(n)
set.seed(42, "Mersenne-Twister") # To get the same permutation
perm <- sample.int(n)
orgKey[perm] <- obfuscatedKey

identical(key, orgKey) # TRUE

......你当然可以结合两种方法......