返回博客首页
← 所有文章

NativeScript 8.8 继续符合 WinterCG 关于 crypto、btoa 和 atob 的规范

2024 年 7 月 10 日 — 作者:Osei Fortune

NativeScript 8.8 继续符合 WinterCG 关于 cryptobtoaatob 的规范

加密

正如芝加哥的软件架构师兼网络爱好者 Niecky AllenThe Web Cryptography API in Action 中简洁地总结的那样

密码学是许多应用程序和我们习以为常的安全实践的核心。无论某人是在向银行账户汇款还是在注册网站,都需要以不同的形式来确保信息、资金甚至人员的安全。

银行和医疗保健等服务严重依赖加密来确保数据安全和保密。如果管理您的健康或财务记录的系统没有良好的密钥存储、生成和轮换实践,可能会产生严重的后果。在客户端、浏览器或其他地方进行加密可能有助于保护敏感数据的缓存或确保网络请求被屏蔽,即使流量被嗅探。

getRandomValues() 方法允许您获取密码学强随机值。作为参数提供的数组将填充随机数(在密码学意义上是随机的)。

const array = new Uint32Array(10);
crypto.getRandomValues(array);

console.log("Your lucky numbers:");
for (const num of array) {
  console.log(num);
}

randomUUID() 方法用于使用密码学安全的随机数生成器生成 v4 UUID。

let uuid = crypto.randomUUID();
console.log(uuid); // for example "41c0df6d-1477-4d0a-b94b-d03d0fe3b8e4"

SubtleCrypto

SubtleCrypto 提供了许多低级加密函数。

generateKey 方法目前支持以下算法:HMACRSA-OAEP,更多算法将在 8.9 中包含。

在以下示例中,我们生成一个 HMAC 密钥、签名验证

const message = 'Hello World';
const enc = new TextEncoder();
const encoded = enc.encode(message);

const key = await crypto.subtle.generateKey(
		{
			name: 'HMAC',
			hash: { name: 'SHA-512' },
		},
		true,
		['sign', 'verify'],
);

const signature = await crypto.subtle.sign('HMAC', key, encoded);

const result = await crypto.subtle.verify('HMAC', key, signature, encoded);

console.log('is valid ? ', result);

需要编码或解码 Base64 字符串?

btoa

btoa() 方法从二进制字符串创建一个 Base64 编码的 ASCII 字符串

const encodedData = btoa("Hello, world"); // encode a string

atob

atob() 方法解码使用 Base64 编码编码的数据字符串。

const encodedData = btoa("Hello, world"); // encode a string
const decodedData = atob(encodedData); // decode the string

持续迈向完全合规

作为 NativeScript 的 TSC 成员,我们坚定地相信并支持 WinterCG 的目标。

Web 可互操作运行时社区组 (wintercg) 旨在通过专注于非 Web 浏览器实现的特定需求,来增强其他现有社区和工作组专注于 Web 平台功能和 API 开发的工作。

每个即将发布的 NativeScript 版本都将继续朝着完全符合这些目标的方向发展。