有人知道我如何在Google Apps脚本中生成PBKDF2密钥吗? (包括生成所需的“盐”值)
我正在从Node.js寻找类似的东西:
const key = crypto.pbkdf2Sync('secret', 'salt', 100000, 64, 'sha512');
或者从Go pbkdf2函数中获得以下信息:
pbkdf2.Key([]byte(plaintext), salt, iterations, macKeyLen, sha512.New)
我正试图满足Apple MDM协议中用于AccountConfiguration的标准,如本页所示:
这是我要实现的代码段:
应使用CommonCrypto库或等效的盐分SHA512 PBKDF2词典在服务器上创建passwordHash数据对象,其中包含三个项目:熵是从密码哈希中派生的密钥(示例是从CCKeyDerivationPBKDF()获得,盐是32个字节的随机盐(来自CCRandomCopyBytes()),并且迭代包含迭代次数(来自CCCalibratePBKDF()),使用的最小哈希时间为100毫秒(如果未知,则为20,000至40,000迭代范围内的数字)。应将这三个密钥的字典放入密钥SALTED-SHA512-PBKDF2下的外部字典中,并转换为二进制数据,然后再将其设置为配置字典passwordHash密钥值。
“熵”字典项需要PBKDF2键。
该脚本需要作为Google Apps脚本运行,因为它将作为我正在开发的表格附件的一部分。
更新:我认为稍微往后一点可能会有所帮助。
这是我想要的密码哈希。它是使用Go pbkdf2函数和密码“ password”生成的。
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI + CjxwbGlzdCB2ZXJzaW9uPSIxLjAiPjxkaWN0PjxrZXk + U0FMVEVELVNIQTUxMi1QQktERjI8L2tleT48ZGljdD48a2V5PmVudHJvcHk8L2tleT48ZGF0YT4ycnFxTGVHQVY0OTdFemROUm5pcHNPcUFGZHhHSjZzZWV5d2U3UURyQlVxNzE5ZitUNTNkaG0rQkJTeUZ2WlovM25TUVZyeHhUTGk1a1FhQWF5Nm5Kc0tjTGllRFBwR0E2dWFpWUsrRlRtYUdKRkl5cWR4a1lUT2tlWFBKMUJGUjBXRUxVRkRXYzVxUUwrL0dMb21CMnRYSldYUGxOMXJPVmdxQnpHZ1BlTTQ9PC9kYXRhPjxrZXk + aXRlcmF0aW9uczwva2V5PjxpbnRlZ2VyPjIxNTA3PC9pbnRlZ2VyPjxrZXk + c2FsdDwva2V5PjxkYXRhPktmRU1QUDZJOWtZTldKR056ajU1eEwvdWFpUlduUlJPUG9HVkx3NGtjdE09PC9kYXRhPjwvZGljdD48L2RpY3Q + PC9wbGlzdD4K
因此,如果我在Google Apps脚本中运行以下命令序列:
var passwordHash = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9uPSIxLjAiPjxkaWN0PjxrZXk+U0FMVEVELVNIQTUxMi1QQktERjI8L2tleT48ZGljdD48a2V5PmVudHJvcHk8L2tleT48ZGF0YT5nNnVGdml2RkpwUTFuSjFCblp3Yk0wdVFLNVZ2SWorU2s4d0piTVRFdjhZdEVZS1ZUWFpIZUluZHB0OWZZM0hmaTdNQ3VCb1pROHhOMDlFNWJTZzRab0FaN3FSOWZNanB0a2czZE1pbngyaXBDdng0aEl2RHJZS0UzamF4a0VaSFlJaW9TWHZYSWg1TXczNHhsd1JuRHdzVGZ6S3h0YmpUQ29oVS9lSjdOWFk9PC9kYXRhPjxrZXk+aXRlcmF0aW9uczwva2V5PjxpbnRlZ2VyPjM5NzY2PC9pbnRlZ2VyPjxrZXk+c2FsdDwva2V5PjxkYXRhPlFwVjk3K2UrVzgvdHB3Z0M1dXcrT0VBYzBxS2dJZ1ZYTTRXdzR2R2NXdHc9PC9kYXRhPjwvZGljdD48L2RpY3Q+PC9wbGlzdD4K";
var decoded = Utilities.base64Decode(passwordHash);
var plist = Utilities.newBlob(decoded).getDataAsString();
我得到以下plist输出:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SALTED-SHA512-PBKDF2</key>
<dict>
<key>entropy</key>
<data>g6uFvivFJpQ1nJ1BnZwbM0uQK5VvIj+Sk8wJbMTEv8YtEYKVTXZHeIndpt9fY3Hfi7MCuBoZQ8xN09E5bSg4ZoAZ7qR9fMjptkg3dMinx2ipCvx4hIvDrYKE3jaxkEZHYIioSXvXIh5Mw34xlwRnDwsTfzKxtbjTCohU/eJ7NXY=</data>
<key>iterations</key>
<integer>39766</integer>
<key>salt</key>
<data>QpV97+e+W8/tpwgC5uw+OEAc0qKgIgVXM4Ww4vGcWtw=</data>
</dict>
</dict>
</plist>
有人知道(在Google Apps脚本中)如何从原始密码“ password”中生成“熵”,“迭代”和“盐”值(如此类数据)吗?
我认为这需要使用此类的方法:
https://developers.google.com/apps-script/reference/utilities/utilities