我想Crypto-JS
使用 Google Apps 脚本并将所有源文件复制到我的项目中。
尝试使用它加密数据时AES
,我无法让它工作,因为以下参考aes.js
在 Google Apps 脚本中无效:
var C_lib = C.lib;
这是我的“JavaScript for Dummies”问题(我是 JavaScript 新手):-)
如何引用和使用C.lib
Google Apps 脚本?是什么C.lib
?我没有在 Google 和 SO 上找到任何好的信息。
我想Crypto-JS
使用 Google Apps 脚本并将所有源文件复制到我的项目中。
尝试使用它加密数据时AES
,我无法让它工作,因为以下参考aes.js
在 Google Apps 脚本中无效:
var C_lib = C.lib;
这是我的“JavaScript for Dummies”问题(我是 JavaScript 新手):-)
如何引用和使用C.lib
Google Apps 脚本?是什么C.lib
?我没有在 Google 和 SO 上找到任何好的信息。
来自core.js
:
/**
* Library namespace.
*/
var C_lib = C.lib = {};
似乎 CryptoJS 包中的每个文件都使用它:
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var BlockCipher = C_lib.BlockCipher;
core.js
因此,如果您使用的是开发版本,很可能您必须链接。
CryptoJS 3.1的示例
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script>
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
</script>
无需任何其他链接即可工作。
在应用程序脚本中导入外部库的主要问题是完全缺乏对模块的任何支持。
另一个问题是不受支持的类/方法。
在cryptoJS的情况下,
依赖关系需要手动计算。它通常使用require
或记录在脚本的前几行中define
。脚本中的以下链接显示了这些行。
关于不受支持的类,应用程序脚本不支持同时存在于 和crypto
中的本机库。在这种情况下,问题无法绕过 AFAIK。因此不可能使用最新版本的 CryptoJS。但可以使用旧版本。node
window
function getCryptoJS() {
const baseUrl = (file, version = '3.3.0') =>
`https://unpkg.com/crypto-js@${version}/${file}.js`;
const require = ((store) => (file) => {
if (Array.isArray(file)) return file.forEach(require);
if (store[file]) return;
store[file] = true;
eval(UrlFetchApp.fetch(baseUrl(file.slice(2))).getContentText());
})({});
/**
* AES
* @see https://github.com/brix/crypto-js/blob/31d00127a7c87066c51abe56e7b8be3a32141cae/aes.js#L8 for dependencies
*/
const dependenciesAES = [
'./core',
'./enc-base64',
'./md5',
'./evpkdf',
'./cipher-core',
'./aes',
];
require(dependenciesAES);
const ciphertext = CryptoJS.AES.encrypt(
'my message',
'secret key 123'
).toString();
/**
* SHA3
* @see https://github.com/brix/crypto-js/blob/31d00127a7c87066c51abe56e7b8be3a32141cae/sha3.js#L4 for dependencies list
*/
const dependenciesSHA3 = ['./core', './x64-core', './sha3'];
dependenciesSHA3.forEach(require);
const hash = CryptoJS.SHA3('Message');
console.log({ ciphertext, hash: hash.toString() });
}
以类似的方式,您可以使用 CryptoJS 3.3.0(=3.1.9-1) 中所有支持的方法