【免费下载链接】NativeScript⚡ Write Native with TypeScript ✨ Best of all worlds (TypeScript, Swift, Objective C, Kotlin, Java, Dart). Use what you love ❤️ Angular, React, Solid, Svelte, Vue with: iOS (UIKit, SwiftUI), Android (View, Jetpack Compose), Flutter and you name it compatible.项目地址https://gitcode.com/gh_mirrors/na/NativeScript点击查看免费下载本文聚焦 NativeScript 仓库中的packages/winter-tc包讲解这一层WinterTC 合规原生代码Objective-C 与 Java在跨平台 Web 兼容能力Web Crypto、atob/btoa 等中所扮演的角色并结合 Android、iOS 两侧的真实实现源码与构建工作流帮助读者理解如何构建、打包并在应用中使用这套原生加密能力。一、WinterTC 包在 NativeScript 架构中的定位packages/winter-tc/README.md开门见山地说明了这个包的职责This library represents native code (Objective-C and Java) used bynativescript/coreto provide WinterTC compliance.即该包是 NativeScript 提供给 JavaScript 运行时的原生代码层目的是让nativescript/core达成 WinterTC 合规。WinterTC 所对应的能力集中在 Web 标准 API 的全局兼容实现上——从仓库源码看packages/core中的wgcWeb Global Compatibility目录packages/core/wgc/crypto/SubtleCrypto.ts、packages/core/wgc/atob.ts、packages/core/wgc/btoa.ts正是消费这些原生能力的一侧wgc层把 Web 标准的crypto.subtle、atob/btoa等 API 暴露给 TypeScript 开发者而真正的加解密、哈希、随机数等重活则下沉到 WinterTC 的原生实现中执行。README 同时点明了 NativeScript 的整体设计理念NativeScript provides platform APIs directly to the JavaScript runtime (with strong types) for a rich TypeScript development experience.翻译过来就是NativeScript 将平台 API直接暴露给 JavaScript 运行时并附带强类型从而提供丰富的 TypeScript 开发体验。WinterTC 包正是这一理念在加密与全局兼容领域的具体落点——JS 侧拿到的是 Web 标准形态的 API底层则由系统原生框架Java/Objective-C完成计算。二、仓库结构一份原生代码两个平台工程packages/winter-tc的目录布局非常清晰原生工程按平台拆分为两个独立项目packages/winter-tc/ ├── android/ # Android Studio 工程Gradle包含 winter_tc 模块 ├── ios/ # Xcode 工程NSCWinterTC包含 framework 源码与单测 ├── DevelopmentWorkflow.md # 构建、打包与在应用中使用的工作流说明 ├── README.md # 包定位说明 ├── package.json └── project.jsonAndroid 侧packages/winter-tc/android/winter_tc/src/main/java/org/nativescript/winter_tc/Crypto.java与Utils.java组成核心实现构建产物为 AARAndroid Archive供nativescript/core的 Android 运行时调用。iOS 侧packages/winter-tc/ios/NSCWinterTC/下的NSCCrypto与NSStringWinterTC分类实现对应能力编译为NSCWinterTC.framework最终以 xcframework 形态打入nativescript/core见packages/core/platforms/ios/NSCWinterTC.xcframework/其中包含 arm64、模拟器、maccatalyst 与 xros 等多个 slice让 core 在 iOS/iPadOS/mac Catalyst/visionOS 上都能直接桥接这些原生符号。三、Android 端实现Crypto.java 与 Utils.javaAndroid 侧的全部加密逻辑集中在Crypto.java约 240 行中其静态方法对应 Web Crypto 标准中的多个原语且全部基于 JDK 标准库javax.crypto、java.security无需引入第三方加密库。3.1 随机数与 UUIDpublic static String randomUUID() { return UUID.randomUUID().toString().toLowerCase(); } public static void getRandomValues(ByteBuffer buffer) { SecureRandom random new SecureRandom(); if (!buffer.isDirect()) { random.nextBytes(buffer.array()); } else { buffer.rewind(); int size buffer.capacity(); byte[] tempBuf new byte[size]; random.nextBytes(tempBuf); buffer.put(tempBuf); } }randomUUID()返回小写形式的 UUID 字符串对应 Web 标准的crypto.randomUUID()。getRandomValues(ByteBuffer)用SecureRandom填充缓冲区同时兼容直接缓冲区与非直接缓冲区——对直接缓冲区先写入临时byte[]再整体put回缓冲区这是为了保证跨 JNI 边界传递的ByteBuffer也能正确写入随机字节。该细节对应 Web Crypto 的crypto.getRandomValues()语义。3.2 消息摘要digestdigest(int mode, ByteBuffer data)通过mode参数选择算法映射关系如下其余取值返回nullmode算法对应 Web Crypto 哈希0SHA-1SHA-11SHA-256SHA-2562SHA-384SHA-3844SHA-512SHA-512实现使用MessageDigest.getInstance(...)摘要结果写入一个直接分配的ByteBufferByteBuffer.allocateDirect后rewind()返回便于运行时直接读取为ArrayBuffer。注意 mode 取值并不连续3 缺失、4 为 SHA-512这一编号约定是 WinterTC 原生层与上层 JS 之间商定的协议调用方必须按同一张表传递 mode。3.3 HMAC 签名与验签public static SecretKey generateKeyHMAC(String algo) { ... } // KeyGenerator public static ByteBuffer signHMAC(String algo, SecretKey key, ByteBuffer data) { ... } public static boolean verifyHMAC(String algo, SecretKey key, ByteBuffer signature, ByteBuffer data) { ... }generateKeyHMAC(algo)使用KeyGenerator按传入算法如HmacSHA256生成对称密钥。signHMAC用Mac实例对data计算 MAC返回签名ByteBuffer。verifyHMAC重新计算 MAC 并与传入的signature做Arrays.equals逐字节比对——注意它不是用 Java 的Mac.doFinal(...).isEqual()常量时间比较而是一般比对代码中signature与data在计算前都会先rewind()保证从任意读位置开始都能正确消费。3.4 RSA-OAEP 密钥对生成、加密与解密public static KeyPair generateKeyRsaOAEP(int modulusLength) { KeyPairGenerator keyPairGen KeyPairGenerator.getInstance(RSA); RSAKeyGenParameterSpec spec new RSAKeyGenParameterSpec(modulusLength, RSAKeyGenParameterSpec.F4); keyPairGen.initialize(spec); return keyPairGen.generateKeyPair(); }密钥生成使用RSAKeyGenParameterSpec固定公钥指数为F4即 65537模长由modulusLength指定Web Crypto 中通常为 2048 或 4096。加解密通过RSA/ECB/OAEPWithSHA-xAndMGF1Padding变换串实现mode与摘要的对应关系如下mode变换串0RSA/ECB/OAEPWithSHA-1AndMGF1Padding1RSA/ECB/OAEPWithSHA-256AndMGF1Padding2RSA/ECB/OAEPWithSHA-384AndMGF1Padding3RSA/ECB/OAEPWithSHA-512AndMGF1PaddingencryptRsaOAEP用pair.getPublic()初始化Cipher为加密模式decryptRsaOAEP用pair.getPrivate()初始化为解密模式与 Web CryptoSubtleCrypto.encrypt/decryptRSA-OAEP的语义对齐。3.5 Base64 工具Utils.javaUtils.java承担两件事atob/btoa基于android.util.Base64实现atob用Base64.NO_WRAP解码后以 UTF-8 还原字符串btoa将 UTF-8 字节编码为无换行的 Base64 字符串——对应 Web 全局的atob()/btoa()。copyToBuffer系列重载提供(buffer, data)、(buffer, data, offset)、(buffer, data, offset, length)与带rewind标志的版本用于把byte[]数据安全地拷入ByteBuffer是原生层与 JS 运行时交换二进制数据的基础工具。四、iOS 端实现NSCCrypto 与 NSStringWinterTCiOS 侧代码位于packages/winter-tc/ios/NSCWinterTC/NSCWinterTC/基于 Apple 的CommonCrypto与Security框架实现公开头文件在NSCWinterTC.h中统一导出。4.1 枚举与数据类型NSCCrypto.hNSCCrypto.h定义了与 Web Crypto 概念一一对应的枚举NSCCryptoHashkNSCCryptoHashSHA1 / SHA256 / SHA384 / SHA512对应 Web Crypto 的哈希族NSCCryptoRsaHashedKeyGenParamsNamekNSCCryptoRSASSA_PKCS1_v1_5 / kNSCCryptoRSA_PSS / kNSCCryptoRSA_OAEP对应 RSA 密钥生成参数中的算法名NSCCryptoKeyUsageskNSCCryptoDecrypt / Encrypt / Sign / Verify / DeriveKey / DeriveBits / WrapKey / UnwrapKey对应 Web Crypto 的KeyUsage枚举。NSCCryptoKeyPair持有一对SecKeyRef私钥/公钥并在dealloc中分别CFRelease初始化时CFRetain内存管理清晰。4.2 随机数与摘要randomUUID[[NSUUID UUID] UUIDString]转小写与 Android 侧行为一致。getRandomValues:使用SecRandomCopyBytes(kSecRandomDefault, ...)填充NSMutableData失败时返回错误描述字符串。digest:mode:按 mode 0/1/2/3 分别调用CC_SHA1 / CC_SHA256 / CC_SHA384 / CC_SHA512输出定长NSData注意与 Android 不同iOS 的 mode 3 是 SHA-512而 Android 用 mode 4 表示 SHA-512两个平台与 JS 侧的 mode 协议各自约定实现细节上存在差异这也是 WinterTC 原生层按平台分别维护的原因。提供异步版本digest:mode:completion:在全局队列计算、主队列回调完成避免大块摘要阻塞 UI 线程。4.3 HMAC 与 RSA-OAEPgenerateKeyHmac:length:按 hash 与长度length / 8字节用SecRandomCopyBytes生成随机密钥未指定长度时退化为对应 SHA 的摘要长度。signHmac:hash:data:用CCHmackCCHmacAlgSHA1/256/384/512计算 MACverifyHmac将重新计算的签名与传入签名做isEqualToData:比对。generateKeyRsa:...通过SecKeyGeneratePair生成 RSA 密钥对并把keyUsages数组中的用法映射为kSecAttrCanEncrypt / kSecAttrCanDecrypt / kSecAttrCanSign / kSecAttrCanVerify / kSecAttrCanDerive / kSecAttrCanWrap / kSecAttrCanUnwrap等 Security 属性。encryptRsa:key:hash:data:与decryptRsa:...按NSCCryptoHash选择kSecKeyAlgorithmRSAEncryptionOAEPSHA1/256/384/512分别用SecKeyCreateEncryptedData/SecKeyCreateDecryptedData完成 OAEP 加解密isPrivate布尔控制使用私钥还是公钥。同样提供主队列回调的异步版本。4.4 Base64 工具NSStringWinterTCNSStringWinterTC.h实现见NSStringWinterTC.m以 NSString 分类形式提供atob:与btoa:atob:用initWithBase64EncodedString:options:解码btoa:用base64EncodedStringWithOptions:编码语义与 Android 的Utils.atob/btoa对齐。此外packages/winter-tc/ios/NSCWinterTC/NSCWinterTCTests/下还带有原生单元测试工程如TNSWidgetsTests.m可在 Xcode 中直接验证加密原语的正确性。五、WinterTC 与 nativescript/core 的集成WinterTC 原生层并非独立使用而是被打包进nativescript/core再经由 core 暴露为 Web 标准形态的 APIwgc 目录packages/core/wgc/是 core 中面向 Web 全局兼容能力的模块cryptoSubtleCrypto.ts、index.ts、atob.ts、btoa.ts等负责把 JS 层的调用编排到原生实现上。iOS 侧集成WinterTC 的编译产物以NSCWinterTC.xcframework形式随nativescript/core分发见packages/core/platforms/ios/NSCWinterTC.xcframework/core 的 TypeScript 桥接代码可直接引用NSCCrypto与NSString的 WinterTC 分类符号。Android 侧集成WinterTC 以org.nativescript.winter_tc包名Crypto、Utils提供静态方法由 core 的 Android 运行时经 JNI 调用。对 NativeScript 应用开发者而言这意味着在应用代码里写crypto.subtle.digest(...)、crypto.getRandomValues(...)、atob(...)/btoa(...)时实际执行路径是Web 标准 JS API → wgc 桥接 → WinterTC 原生实现Java/Objective-C→ 系统加密框架JCA/CommonCrypto-Security既保持了标准 API 的开发体验又获得系统级加密实现的安全性与性能。六、构建与打包DevelopmentWorkflow.md 工作流packages/winter-tc/DevelopmentWorkflow.md给出了完整的开发流程核心环节如下。6.1 前置条件安装原生工具链与 NativeScript官方快速配置文档中有完整说明打开原生工程需要Android StudioAndroid与XcodeiOS。6.2 构建整个包在 macOS 上执行$ ./build.sh该脚本会同时构建 Android 与 iOS把产物汇总到./dist/package并打包为./dist/tns-core-modules-widgets-*.tgz。6.3 仅构建 Android在 Unix 系操作系统上执行$ ./build.android.sh只构建 Android 工程同样在./dist/package汇总并打包为./dist/tns-core-modules-widgets-*.tgz原生 AAR 输出位于./android/widgets/build/outputs/aar/widgets-release.aar。注文档在 Windows 上运行 bash 脚本的建议是安装 GIT SCMGit for Windows使用 Git Bash 执行。当前仓库快照的packages/winter-tc目录下未包含build.sh等脚本文件若需执行请以实际检出版本为准。6.4 仅构建 iOS在 macOS 上执行$ ./build.ios.sh只构建 Xcode 工程并打 tgz 包原生 iOS framework 输出位于./ios/TNSWidgets/build/TNSWidgets.framework。6.5 在应用中使用npm link 本地联调需要把包链接到应用工程时按以下步骤# 在 ./dist/package 目录下执行注册本地包 npm link # 在应用工程目录下执行链接到已注册的包 npm link tns-core-modules-widgets之后每次修改原生代码都需要重新执行上面的构建命令build / build.android / build.ios生成新产物再在应用中生效。这是典型的先构建、后联调工作流原生改动必须经编译打包后才能被应用侧感知。七、从 IDE 打开原生工程两个平台子目录下各有一份简短的 README说明如何在 IDE 中打开与构建Androidpackages/winter-tc/android/README.md打开Android Studio → File → Open → 选择packages/winter-tc/android/目录在左侧 Project 标签页选择winter_tc模块。构建右侧 Gradle 标签页 →android/winter_tc/Tasks/build/→ 执行assembleRelease任务输出位于./android/winter_tc/build/outputs/。iOSpackages/winter-tc/ios/README.md打开Xcode → File → Open → 选择packages/winter-tc/ios/NSCWinterTC/目录在左侧 Project navigator 中选择NSCWinterTC工程。八、问题与支持渠道WinterTC 包的功能性问题遵循 NativeScript 仓库统一的支持策略Bug 报告与功能请求一律通过仓库的 GitHub Issues 提交避免在 issues 中提一般性问题一般性疑问与使用咨询可前往 NativeScript 社区Discord寻求帮助或联系官方 Professional Partners 获取商业支持。也就是说issue 通道严格用于缺陷与特性日常答疑走社区渠道保证维护者可聚焦代码质量。结语packages/winter-tc是 NativeScript 实现 WinterTC 合规的关键拼图它以一份原生代码、两个平台工程Java Objective-C的形态为nativescript/core提供了 Web Crypto 标准的原生底座涵盖随机数、UUID、SHA 系列摘要、HMAC 签名/验签、RSA-OAEP 加解密与 Base64 编解码等完整原语。理解它的目录结构、模式约定如 digest 的 mode 映射、构建脚本与 npm link 联调流程能够帮助开发者在 NativeScript 应用中放心使用标准化的 Web 加密 API也为需要扩展原生加密能力或排查加密相关问题的工程师提供了清晰的切入点。赞分享【免费下载链接】NativeScript⚡ Write Native with TypeScript ✨ Best of all worlds (TypeScript, Swift, Objective C, Kotlin, Java, Dart). Use what you love ❤️ Angular, React, Solid, Svelte, Vue with: iOS (UIKit, SwiftUI), Android (View, Jetpack Compose), Flutter and you name it compatible.项目地址https://gitcode.com/gh_mirrors/na/NativeScript点击查看免费下载相关推荐NativeScript核心包nativescript/core深度解析NativeScript核心包nativescript/core深度解析 本文深入解析了NativeScript核心包nativescript/core的架GitHub_Trending/co/config.nvim网络安全风险分析工具链配置GitHub_Trending/co/config.nvim网络安全风险分析工具链配置 引言 你是否在代码审计中因工具配置繁琐而错失风险修复时机本文将详细介PostgreSQL逻辑复制pgAdmin4配置发布与订阅实战PostgreSQL逻辑复制pgAdmin4配置发布与订阅实战 逻辑复制Logical Replication是PostgreSQL实现数据同步的高级特性移动开发前端跨平台上一篇终极指南如何用AutoLegalityMod插件90%提升宝可梦数据编辑效率下一篇Windows 11右键菜单终极自定义指南恢复传统菜单与个性化功能扩展创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考