我需要一个消费者密钥和我正在开发的R包的秘密.每个用户申请和获取他们自己都有点麻烦,并且确实没有必要,因为他们必须使用用户名/密码进行身份验证才能使用包功能.但是,我不允许在公开场合分享我的钥匙.有没有什么方法可以将密钥+秘密(或任何信息)隐藏在我的包源中,一旦它在CRAN上?我猜的答案是肯定的,但我想确保我不会错过其他想法.
更新:我预见的唯一滥用是有人在另一个应用程序中提取和使用密钥来最大化我的速率限制.但如果是这样,那么我可以删除它.但是我可能还有其他形式的虐待.也许我应该让每个人都申请自己的.
只要您知道混淆并不安全,就有一些简单的混淆方法。您没有指定密钥的存储方式,因此我假设它们以二进制形式存储在文件中。
最简单的混淆是具有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
Run Code Online (Sandbox Code Playgroud)
由于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
Run Code Online (Sandbox Code Playgroud)
...当然您可以结合使用这两种方法...