所以现在有很多不同的服务,Google,Twitter,Facebook等等。
每个服务都有一个API密钥,例如:
AIzaSyClzfrOzB818x55FASHvX4JuGQciR9lv7q
所有键的长度和它们包含的字符不同,我想知道生成API键的最佳方法是什么?
我要求的不是一种特定的语言,仅仅是创建密钥的一般方法,应该是用户应用程序的细节加密,还是哈希,或者随机字符串的哈希,等等。我们应该担心哈希算法(MSD,SHA1,bcrypt)等等吗?
编辑:,我已经和几个朋友谈过了(电子邮件/推特),他们建议只使用GUID,去掉破折号。
不过,对我来说,这似乎有点麻烦,希望能得到更多的想法。
发布于 2013-09-11 00:30:35
使用为加密设计的随机数生成器。然后基地-64编码的号码。
这是一个C#示例:
var key = new byte[32];
using (var generator = RandomNumberGenerator.Create())
generator.GetBytes(key);
string apiKey = Convert.ToBase64String(key);
发布于 2014-06-23 14:02:11
API密钥需要具有以下属性:
通常,您将拥有数千个或数百万个API密钥,而不是数十亿,因此它们不需要:
因此,生成API密钥的一种方法是获取两条信息:
用私人秘密签了名。
计数器保证它们唯一地标识用户,并且签名防止伪造。可撤销性要求在执行任何需要API密钥授权的操作之前,检查密钥在数据库中是否仍然有效。
如果您需要从多个数据中心生成密钥,或者没有一种很好的分布式方法来分配序列号,那么一个好的GUID生成器就是增量计数器的一个很好的近似。
或随机字符串的散列。
哈希并不能防止伪造。签署可以保证钥匙来自你。
发布于 2022-02-02 20:13:48
更新,在Chrome的控制台和Node.js中,您可以发出:
crypto.randomUUID()
示例输出:
'4f9d5fe0-a964-4f11-af99-6c40de98af77'
原始答案(更强):
您可以尝试您的web浏览器控制台,方法是打开一个新选项卡,点击Chrome上的CTRL + SHIFT +I,然后输入以下立即调用的函数表达式(IIFE):
(async function (){
let k = await window.crypto.subtle.generateKey(
{name: "AES-GCM", length: 256}, true, ["encrypt", "decrypt"]);
const jwk = await crypto.subtle.exportKey("jwk", k)
console.log(jwk.k)
})()
示例输出:
gv4Gp1OeZhF5eBNU7vDjDL-yqZ6vrCfdCzF7HGVMiCs
参考文献:
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKey
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/exportKey
我得承认我写这封信主要是为了供将来参考.
https://stackoverflow.com/questions/14412132
复制相似问题