npm i --save nativescript-simple-libsodium
- 版本:1.0.6
- GitHub:
- NPM: https://npmjs.net.cn/package/nativescript-simple-libsodium
- 下载量
- 昨天:7
- 上周:8
- 上个月:25
NativeScript Simple Libsodium
Sodium 是一个新、易于使用的加密、解密、签名、密码散列等软件库。它是跨编译的,并支持大多数现代设备。使用此插件,您可以直接在您的 NativeScript 项目中使用它。
对于 iOS,我是直接从源代码编译的。对于 Android,我使用了 Lazysodium 原生库。
注意: 我既不是 iOS 的专家,也不是 Android 的专家。所以,如果您认为您能做得更好,请贡献一下吧 :)
支持的平台
- iOS
- Android
Libsodium 也可以与其他编程语言一起使用。您可以从这里获取更多信息:https://libsodium.gitbook.io/doc/bindings_for_other_languages
安装
tns plugin add nativescript-simple-libsodium
使用
导入
TS/Angular
import { SimpleLibsodium, AEDMethod, AEDValues, Base64Variant, Keybytes, Noncebytes } from 'nativescript-simple-libsodium';
let simpleLibsodium = new SimpleLibsodium();
JavaScript
var mSimpleLibsodium = require("nativescript-simple-libsodium");
var simpleLibsodium = new mSimpleLibsodium.SimpleLibsodium();
请查看示例项目以获取更多示例。
生成随机数据
simpleLibsodium.generateRandomData();
// OR
simpleLibsodium.generateKeyWithSuppliedString("Jibon Costa"); // Keep in mind that in order to produce the same key from the same password, the same algorithm, the same salt, and the same values for opslimit and memlimit have to be used. Therefore, these parameters have to be stored for each user.
AED 加密/解密
let key = this.simpleLibsodium.generateRandomData(AEDValues.XCHACHA20POLY1305_IETF_KEYBYTES);
// or let key = this.simpleLibsodium.generateKeyWithSuppliedString("myKey", AEDValues.XCHACHA20POLY1305_IETF_KEYBYTES);
let enc = this.simpleLibsodium.AEDEncrypt(AEDMethod.XCHACHA20_POLY1305_IETF, "Hello World", key.raw);
console.dir(enc);
let dec = this.simpleLibsodium.AEDDecrypt(AEDMethod.XCHACHA20_POLY1305_IETF, enc.rawCrypted, key.raw, enc.rawNonce);
console.dir(dec);
保密盒
let key = this.simpleLibsodium.generateRandomData(Keybytes.SECRETBOX_KEYBYTES);
// or let key = this.simpleLibsodium.generateKeyWithSuppliedString("myKey", Keybytes.SECRETBOX_KEYBYTES);
let enc = this.simpleLibsodium.secretBoxEncrypt("Hello World", key.raw);
console.dir(enc);
let dec = this.simpleLibsodium.secretBoxOpen(enc.rawCrypted, key.raw, enc.rawNonce);
console.dir(dec);
Salsa20
let key = this.simpleLibsodium.generateRandomData(Keybytes.STREAM_KEYBYTES);
// or let key = this.simpleLibsodium.generateKeyWithSuppliedString("myKey", Keybytes.STREAM_KEYBYTES);
let enc = this.simpleLibsodium.xSalsa20Encrypt("Hello World", key.raw);
console.dir(enc);
let dec = this.simpleLibsodium.xSalsa20Decrypt(enc.rawCrypted, key.raw, enc.rawNonce);
console.dir(dec);
盒易
let bob = this.simpleLibsodium.boxKeyPaired();
let alice = this.simpleLibsodium.boxKeyPaired();
// Bob sending message to Alice. So, here will need Alice's public key & Bob's private/secret key
let enc = this.simpleLibsodium.boxEasy("Hello World", alice.public_key, bob.private_key);
console.dir(enc);
// Alice got the message from Bob. Now Alice need his private key & Bob's public key.
let dec = this.simpleLibsodium.boxOpenEasy(enc.rawCrypted, enc.rawNonce, bob.public_key, alice.private_key);
console.dir(dec);
密码散列/验证
let enc = this.simpleLibsodium.passwordHash("MyPassword");
console.dir(enc);
if (this.simpleLibsodium.passwordHashVerify(enc.plainHash, "MyPassword")) {
console.log("Password Matched!");
} else {
console.log("Password invalid!");
}
加密认证/验证
let enc = this.simpleLibsodium.cryptoAuth("Jibon Costa");
console.dir(enc);
if (this.simpleLibsodium.cryptoAuthVerify(enc.rawCrypted, "Jibon Costa", enc.rawKey)) {
console.log("Matched !")
} else {
console.log("Didn't match")
}
SHA-256/512 散列
let enc = this.simpleLibsodium.SHA2Hash("MyPassword", 512); // or 256
console.dir(enc);
方法/API
方法 | 描述 | 参考 |
---|---|---|
generateRandomData(length?: number) | 生成随机数据 | https://libsodium.gitbook.io/doc/generating_random_data |
generateKeyWithSuppliedString(mykey: string, length?: number, salt?: any, opslimit?: number, memlimit?: number) | 使用密钥生成随机数据。算法:crypto_pwhash_ALG_ARGON2I13 ,opslimit:crypto_pwhash_OPSLIMIT_MIN ,memlimit:crypto_pwhash_MEMLIMIT_MIN 。如果不提供任何 salt ,则将自动生成并作为输出返回。请注意,为了从相同的密码生成相同的密钥,必须使用相同的算法、相同的盐以及相同的 opslimit 和 memlimit 的值。 |
https://libsodium.gitbook.io/doc/password_hashing/the_argon2i_function#key-derivation |
AEDEncrypt(method: AEDMethod, msg: string, key: any, nonce?: any, additionalMsg?: string) | AED 加密。在这里,nonce 和 additionalMsg 是可选的。如果不插入任何 nonce ,则将自动生成 nonce 。如果不插入任何 additionalMsg ,则将使用 nonce 的十六进制值作为 additionalMsg 。 |
https://libsodium.gitbook.io/doc/secret-key_cryptography/aead |
AEDDecrypt(method: AEDMethod, encrypData: any, key: any, nonce: any, additionalMsg?: string) | AED 解密。在这里,encrypData 、key 和 nonce 应该是二进制数据。如果您有十六进制或 base64 字符串,则在使用之前需要将其转换。在这种情况下,您可以使用 hexTobin() 或 base64Tobytes() 方法进行转换。 |
https://libsodium.gitbook.io/doc/secret-key_cryptography/aead |
secretBoxEncrypt(text: string, key: any, nonce?: any) | 认证加密。如果不插入任何 nonce ,则将自动生成 nonce 。 |
https://libsodium.gitbook.io/doc/secret-key_cryptography/authenticated_encryption#combined-mode |
secretBoxOpen(encrypData: any, key: any, nonce: any) | 认证解密。在这里,encrypData 、key 和 nonce 应该是二进制数据。如果您有十六进制或 base64 字符串,则在使用之前需要将其转换。在这种情况下,您可以使用 hexTobin() 或 base64Tobytes() 方法进行转换。 |
https://libsodium.gitbook.io/doc/secret-key_cryptography/authenticated_encryption#combined-mode |
xsalsa20Encrypt(message: string, key: any, nonce?: any) | 流密码。如果不输入任何内容作为nonce ,则会自动生成nonce 。 |
https://libsodium.gitbook.io/doc/advanced/stream_ciphers/xsalsa20 |
xsalsa20Decrypt(encrypData: any, key: any, nonce: any) | 流密码。在这里,encrypData 、key 和nonce 应该是二进制数据。如果您有十六进制或base64字符串,则需要在使用前将其转换。在这种情况下,您可以使用hexTobin() 或base64Tobytes() 方法进行转换。 |
https://libsodium.gitbook.io/doc/advanced/stream_ciphers/xsalsa20 |
boxEasy(msg: string, public_key: any, private_key: any, nonce?: any) | 使用密钥对进行认证加密。如果不输入任何内容作为nonce ,则会自动生成nonce 。 |
https://libsodium.gitbook.io/doc/public-key_cryptography/authenticated_encryption |
boxOpenEasy(ciphertext: any, public_key: any, private_key: any, nonce: any) | 使用密钥对进行认证解密。在这里,ciphertext 、public_key 、private_key 和nonce 应该是二进制数据。如果您有十六进制或base64字符串,则需要在使用前将其转换。在这种情况下,您可以使用hexTobin() 或base64Tobytes() 方法进行转换。 |
https://libsodium.gitbook.io/doc/public-key_cryptography/authenticated_encryption |
boxKeyPaired() | 密钥对生成 | https://libsodium.gitbook.io/doc/public-key_cryptography/authenticated_encryption#key-pair-generation |
passwordHash(password: string), opslimit?: number, memlimit?: number | 存储密码散列。opslimit: crypto_pwhash_OPSLIMIT_INTERACTIVE ,memlimit: crypto_pwhash_MEMLIMIT_INTERACTIVE |
https://libsodium.gitbook.io/doc/password_hashing/the_argon2i_function#password-storage |
passwordHashVerify(plainHash: any, password: string) | 密码验证。在这里,plainHash 应该是纯文本/字符串。 |
https://libsodium.gitbook.io/doc/password_hashing/the_argon2i_function#password-storage |
cryptoAuth(msg: string) | 认证 | https://libsodium.gitbook.io/doc/secret-key_cryptography/secret-key_authentication |
cryptoAuthVerify(ciphertext: any, msg: string, key: any) | 认证验证。在这里,ciphertext 和key 应该是二进制数据。如果您有十六进制或base64字符串,则需要在使用前将其转换。在这种情况下,您可以使用hexTobin() 或base64Tobytes() 方法进行转换。 |
https://libsodium.gitbook.io/doc/secret-key_cryptography/secret-key_authentication#usage |
SHA2Hash(msg: string, type?: number) | SHA-2 (SHA 256/512)。type 的值将是256 或512 |
https://libsodium.gitbook.io/doc/advanced/sha-2_hash_function |
binTohex(binary: any) | 十六进制编码 | https://libsodium.gitbook.io/doc/helpers#hexadecimal-encoding-decoding |
hexTobin(hex: string) | 十六进制解码 | https://libsodium.gitbook.io/doc/helpers#hexadecimal-encoding-decoding |
bytesToBase64(data: any, variant?: Base64Variant) | Base64编码 | https://libsodium.gitbook.io/doc/helpers#base64-encoding-decoding. |
base64Tobytes(base64String: string, variant?: Base64Variant) | Base64解码 | https://libsodium.gitbook.io/doc/helpers#base64-encoding-decoding |
stringTodata(text: string) | 将字符串文本转换为二进制 | 本地实现 |
dataTostring(data: any) | 将二进制转换为文本 | 本地实现 |
注意:您可以将更多的方法或API从核心sodium包轻松添加到您的项目中。
Android
let simpleLibsodium = new SimpleLibsodium();
let sodium = simpleLibsodium.sodium
// now you can call any method/api from core sodium package.
sodium.crypto_secretbox_keygen();
iOS
// From iOS you will be able to call the methods directly.
crypto_secretbox_keygen();
要获取typescript类型支持,您可以在您的references.d.ts
文件中添加以下行
/// <reference path="./node_modules/nativescript-simple-libsodium/typingz/android.d.ts" />
/// <reference path="./node_modules/nativescript-simple-libsodium/typingz/objc!sodium.d.ts" />
许可
Apache License Version 2.0, January 2004