Nbed64.JS 库分享 一款非常强大的、通用的加密、解密库

Nbed64.js是一个强大的、开源的JavaScript加密解密库,提供12个API,包括动态和对称加解密以及Base64编解码。其设计初衷是提升可读性和通用性,支持多种编程语言和平台,自动处理不同编码。库中的API如nbed64StringEncryptEx()、nbed64StringDecryptEx()等提供动态加密功能,确保安全性。此外,Nbed64.js在不同语言环境下的解密会自动转换为默认编码,简化跨语言数据交互。
摘要由CSDN通过智能技术生成

Nbed64.js

Nbed64 是一款非常强大的、通用的加密、解密库,GitHub开源地址如下

gitHub

https://github.com/love915sss/js-nbed64-base64/

Nbed64加解密方案的主要能力

Nbed64共提供了12个API,分为3组,每组4个API。分别为:

  1. 动态加解密API组

    • [nbed64StringEncryptEx()] 动态加密字符串,数据不变,密钥不变,但加密结果不重复,次次都变
    • [nbed64StringDecryptEx()] 动态解密字符串,与 nbed64StringEncryptEx()是一对
    • [nbed64BinaryEncryptEx()] 动态加密二进制,数据不变,密钥不变,但加密结果不重复,次次都变
    • [nbed64BinaryDecryptEx()] 动态解密二进制,与 nbed64BinaryEncryptEx()是一对
  2. 对称加解密API组

    • [nbed64StringEncrypt()] 对称加密字符串,数据不变,密钥不变,加密结果也不变,固定不变的
    • [nbed64StringDecrypt()] 对称解密字符串,与 nbed64StringEncrypt()是一对
    • [nbed64BinaryEncrypt()] 对称加密二进制,数据不变,密钥不变,加密结果也不变,固定不变的
    • [nbed64BinaryDecrypt()] 对称解密二进制,与 nbed64BinaryEncrypt()是一对
  3. 标准Base64编解码API组

    • [nbed64StringEncode()] 标准的Base64编码,用于编码字符串,支持RFC4648安全规范
    • [nbed64StringDecode()] 标准的Base64解码,用于解码字符串,支持RFC4648安全规范
    • [nbed64BinaryEncode()] 标准的Base64编码,用于编码二进制,支持RFC4648安全规范
    • [nbed64BinaryDecode()] 标准的Base64解码,用于解码二进制,支持RFC4648安全规范

*备注:动态加密是(传统)对称加密的升级版,但本质上,它还是对称加密,但它比传统的对称加密更加安全可靠。如果您对此有研究兴趣,请您移步 *[动态加密的作用和原理]了解更多详情。

nbed64StringEncryptEx()
nbed64StringDecryptEx()
nbed64BinaryEncryptEx()
nbed64BinaryDecryptEx()
nbed64StringEncrypt()
nbed64StringDecrypt()
nbed64BinaryEncrypt()
nbed64BinaryDecrypt()
nbed64StringEncode()
nbed64StringDecode()
nbed64BinaryEncode()
nbed64BinaryDecode()
动态加密的作用和原理

Nbed64的设计初衷与特性

  1. 在Nbed64问世之前,市面上早就不缺对称加密算法,像AES、DES、TDEA、RC4、RC5等…已如雷贯耳,那么设计Nbed64的意义在哪里?答案是:可读性 + 通用性 + 轻量级。传统加密算法均有一个共性:主要服务于二进制数据安全。加密的结果不能字符化,而不能字符化就意味着:没有输入性,也没有可读性,不方便打印,不方便调试,等等…这是不利于现代可视化交互的,尤其像JS、PHP等脚本语言操作二进制很不方便!在WEB应用中,以及基于WEB的APP中,传统加密都很不方便作数据交互。怎么办呢,人们通常有两个选择:1. 转换成十六进制文本,2. 转换成Base64 文本。于是,网上到处都是AES、DES转Base64的帖子。您看,转了一圈,问题又回来了----那么我们为什么不直接在Base64编码的基础上来实现加密呢?为什么要脱裤子放屁呢?!于是,打造一套轻量的、通用的、可读的、开箱即用的加密方案,这,就是作者设计Nbed64的初衷!

  2. Nbed64是一套[多语言] + [跨平台]的加解密库,Nbed64现已开源的语种有:GO版、C#版、C/C++版、Java版、Python版、JavaScript版、PHP版、E版,以及其它即将问世的语种版。这意味着,在所有主流编程语言中,但凡使用Nbed64加解密的数据,都均可无障碍交互。对不同语言的开发者,Nbed64的函数名,参数数量,参数位置, 执行结果,都是一致的、统一的。换句话说:使用Nbed64,前后端的开发者不论使用什么语言,对结果的认识是统一的,是没有分歧的,是可以无障碍交互数据的。

  3. Nbed64是Network Bridge Encrypt Decrypt Base64的缩写,它是一套通用的、开源的、跨语言的、跨平台的卓越加密方案库。这套库的算法最早由合肥网桥网络科技的CEO设计于2014年,当初仅有C++一个版本,随后在其公司的生产环境中不断扩充和迭代,发展成了今天的多语种版。因此nb指的就是网桥科技,ed指的是加密和解密,64指的是该算法基于Base64编码框架。请不要误以为nbed意指’非对称的…',这样理解是错误的!强调一下, Nbed64是一套对称的加密方案,以及升级版的对称加密方案,人们很喜欢称之为:动态加密方案!

  4. Nbed64对字符集的编码由内部算法实现,如:UTF-8,UTF-16,GBK等。它不依赖运行平台的API,不依赖运行环境的API。这意味着:在Windows、Linux、Unix、Mac、Android、Ios等不同的平台中运行的结果是一致的,安全的,稳定的。使用者使用跨平台语言开发时不必关心各系统平台之间的差异,也不必关心各种编码API在不同系统平台上使用的差异。开箱即用,编码问题与您无关。

  5. Nbed64解密字符串时,会自动转换为当前语言的默认编码。如JavaScript环境中,被解密的字符串会自动转换为UTF-16,因为JavaScript的默认编码就是UTF-16,也只有UTF-16才不会乱码。强调一下,这里"自动"所指的意思是:不论原内容是UTF-8编码也好,是GBK编码也罢,只要在JS里解密字符串就必然是UTF-16,在C/C++里解密就必然是UTF-8。这样的设计很方便也很重要,众所周知,不同编程语言的默认编码是不同的,这意味着跨语言数据交互是需要彼此转换编码的,当彼此的默认编码不同时,开发者需要知已知彼才能转换编码,这是繁琐头疼的过程。而Nbed64解决了这样的尴尬,它在解密时扮演着自动翻译者的工作。这让开发者之间可以尽情的交互数据,而不必分散精力来处理彼此的编码问题。

  6. Nbed64为何选择Base64作为加密框架呢?因为,二进制转成字符集的常用方案有两种:十六进制文本 和 Base64文本。其中十六进制需要两个字符表示一个字节,因此,十六进制占用内存的尺寸为:X * 2,所以,会有1倍的空间浪费。而Base64则用4个字符表示3个字节,因此,Base64占用内存的尺寸为:X / 3 * 4,所以,只有3分之1的空间浪费。在网络当道的今天,Nbed64只能选择更节约的Base64编码框架。同样能满足需求,当然要保持节约精神。

  7. Nbed64的算法虽然基于Base64编码框架,但算法经过大量优化,性能远高于传统的Base64算法。作者曾在多平台下作过对比,各以10MB测试数据为例,Nbed64解密数据平均比传统的base64解码数据快100倍以上!主要原因是:传统的Base64解码时,通过遍历查找Base64映射表中的字符串来寻址,而Nbed64直接通过计算推导来寻址,因此少了一层for()循环,再加上其它各种优化,性能便有了极大的提升。经过压力测试,即使在移动浏览器中使用JavaScript编码512MB的数据也迅捷快速、毫无压力,其它语言和平台的性能自不必多说了。

  8. Nbed64使用Apache License 2.0 开源协议----Apache License 2.0 是当今最友好的开源协议之一。这意味着:任何个人、组织、企业、机构都可以随意修改、转发、共享、商用 Nbed64加密库…

相关链接

Nbed64 在GitHub上开源的其它语种版本

  • [C-Nbed64] 作者用 C/C++ 语言编写的版本
  • [Go-Nbed64] 作者用 Golang 语言编写的版本
  • [JS-Nbed64] 作者用 JavaScript 语言编写的版本
  • [VB-Nbed64] 作者用 Visual Basic 语言编写的版本
  • [CS-Nbed64] 作者用 C Sharp | C# 语言编写的版本
  • [PHP-Nbed64] 作者用 PHP 语言编写的版本
  • [JAVA-Nbed64] 作者用 JAVA 语言编写的版本
  • [Python-Nbed64] 作者用 Python 语言编写的版本

备注:由于编写Demo和README需要大量的时间和精力,因此作者无法在短期内将以上所有的语种版本全部Push。不过别担心,作者不会放松进度和改变计划,弥补空缺只是时间问题…

c-Nbed64
Go-Nbed64
JS-Nbed64
VB-Nbed64
CS-Nbed64
PHP-Nbed64
JAVA-Nbed64
Python-Nbed64

安装与引入

安装

$ npm install --save js-nbed64

如果您无法通过 npm 安装,没关系,以下任意一种方式效果都一样…

引用

在浏览器中

本地…您需要先在GitHub或官网上将nbed64.zip下载并解压,然后…

<script src="nbed64.es5.all.js">/*完整版----研究环境时使用*/</script>
<script src="nbed64.es5.min.js">/*迷你版----生产环境时使用*/</script>

… 或直接从CDN。在这种方式下,您不必下载和安装。

<script src="https://nbed64.oss-cn-hongkong.aliyuncs.com/nbed64.es5.all.js">/*完整版----研究环境时使用*/</script>
<script src="https://nbed64.oss-cn-hongkong.aliyuncs.com/nbed64.es5.min.js">/*迷你版----生产环境时使用*/</script>

以上引用方式虽然很方便,但也很容易污染window,因此,我推荐您使用下面ES6规范标准的引入模式…

作为ES6模块 来引入,浏览器 || nodejs || uin-app || APICloud

本地…您需要先在GitHub或官网上将nbed64.zip下载并解压,然后…

	import * as nbed64 from 'Nbed64 .es6.min';

或者

	import {
   
		nbed64StringEncryptEx,
		nbed64StringDecryptEx,
		nbed64BinaryEncryptEx,
		nbed64BinaryDecryptEx,
		nbed64StringEncrypt,
		nbed64StringDecrypt,
		nbed64BinaryEncrypt,
		nbed64BinaryDecrypt,
		nbed64StringEncode,
		nbed64StringDecode,
		nbed64BinaryEncode,
		nbed64BinaryDecode
	} from 'nbed64.es6.min';

… 或直接从CDN。在这种方式下,您不必下载和安装。

	import * as nbed64 from 'https://nbed64.oss-cn-hongkong.aliyuncs.com/nbed64.es6.min';

或者

	import {
   
		nbed64StringEncryptEx,
		nbed64StringDecryptEx,
		nbed64BinaryEncryptEx,
		nbed64BinaryDecryptEx,
		nbed64StringEncrypt,
		nbed64StringDecrypt,
		nbed64BinaryEncrypt,
		nbed64BinaryDecrypt,
		nbed64StringEncode,
		nbed64StringDecode,
		nbed64BinaryEncode,
		nbed64BinaryDecode
	} from 'https://nbed64.oss-cn-hongkong.aliyuncs.com/nbed64.es6.min';
javascript进行RSA加密并用C#后台接收解码。 /// <summary> /// 产生一组RSA公钥、私钥 /// </summary> /// <returns></returns> public static Dictionary<string, string> CreateRsaKeyPair() { var keyPair = new Dictionary<string, string>(); var rsaProvider = new RSACryptoServiceProvider(1024); RSAParameters parameter = rsaProvider.ExportParameters(true); keyPair.Add("PUBLIC", BytesToHexString(parameter.Exponent) + "," + BytesToHexString(parameter.Modulus)); keyPair.Add("PRIVATE", rsaProvider.ToXmlString(true)); keyPair.Add("PUBLICKEY", rsaProvider.ToXmlString(false)); return keyPair; } /// <summary> /// RSA解密字符串 /// </summary> /// <param name="encryptData">密文</param> /// <param name="privateKey">私钥</param> /// <returns>明文</returns> public static string DecryptRSA(string encryptData, string privateKey) { string decryptData = ""; try { var provider = new RSACryptoServiceProvider(); provider.FromXmlString(privateKey); byte[] result = provider.Decrypt(HexStringToBytes(encryptData), false); ASCIIEncoding enc = new ASCIIEncoding(); decryptData = enc.GetString(result); } catch (Exception e) { throw new Exception("RSA解密出错!", e); } return decryptData; } public static string BytesToHexString(byte[] input) { StringBuilder hexString = new StringBuilder(64); for (int i = 0; i < input.Length; i++) { hexString.Append(String.Format("{0:X2}", input[i])); } return hexString.ToString(); } public static byte[] HexStringToBytes(string hex) { if (hex.Length == 0) { return new byte[] { 0 }; } if (hex.Length % 2 == 1) { hex = "0" + hex; } byte[] result = new byte[hex.Length / 2]; for (int i = 0; i < hex.Length / 2; i++) { result[i] = byte.Parse(hex.Substring(2 * i, 2), System.Globalization.NumberStyles.AllowHexSpecifier); } return result; }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值