在谷歌应用程序脚本中使用CryptoJS-什么是C.lib
Using Crypto-JS in Google Apps Script - What is C.lib?
我想在谷歌应用程序脚本中使用Crypto-JS
,并已将所有源文件复制到我的项目中。
当尝试使用AES
加密数据时,我无法使其工作,因为aes.js
中的以下引用在Google Apps脚本中无效:
var C_lib = C.lib;
这是我的"傻瓜的JavaScript"问题(我是JavaScript新手):-)
如何将C.lib
与Google Apps Script一起引用和使用?什么是C.lib
?我在谷歌和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
记录在脚本的前几行中。脚本中的以下链接显示了这样的行。 -
关于不支持的类,应用程序脚本不支持
node
和window
中都存在的本机crypto
库。在这种情况下,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)中所有支持的方法
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 全局变量和全局对象的属性之间有什么区别吗
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在ember/handlers中使用value和valueBinding有什么区别
- 什么'在webpack外部设置中,reactDom和reactDom不同
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 什么是&&在没有if的行中的变量之间
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- DOM元素和angular元素之间的主要区别是什么
- javascript导入的最佳实践是什么
- 在谷歌应用程序脚本中使用CryptoJS-什么是C.lib
- 使用CryptoJS加密和使用php解密:IV. js的用途是什么?
- 什么'使用cryptojs的最佳选择是将密钥存储在客户端和服务器端,还是生成密钥并以某种方式传递给另一端
- 代码出现错误;ReferenceError:CryptoJS未定义”,虽然我已经包含了必需的.js引用;原因是什么