我希望我们在Google Apps脚本中Crypto-JS
并将所有源文件复制到我的项目中。
尝试使用AES
加密数据时,我无法使其生效,因为aes.js
中的以下引用在Google Apps脚本中无效:
var C_lib = C.lib;
这是我的“JavaScript for Dummies”问题(我是一个JavaScript新手): - )
如何在Google Apps脚本中引用和使用C.lib
?
什么是C.lib
?我没有在Google和SO上找到任何好的信息。
答案 0 :(得分:2)
来自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
。
<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>
没有任何其他链接。
答案 1 :(得分:2)
这里有一个在Apps脚本中运行的各种cryptoJS功能的例子。
http://ramblings.mcpher.com/Home/excelquirks/oauthtoo/cryptogs
虽然速度很慢但确实有效。
答案 2 :(得分:1)
在app脚本中导入外部库的主要问题是完全缺乏对模块的支持。
另一个问题是类/方法不受支持。
对于cryptoJS,
需要手动确定依赖项。通常使用require
或define
将其记录在脚本的前几行中。脚本中的以下链接显示了此类行。
关于不受支持的类,app脚本不支持crypto
和node
中都存在的本机window
库。在这种情况下,不能通过AFAIK来解决问题。因此,不可能使用最新版本的CryptoJS。但是可以使用旧版本。
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)中所有受支持的方法