Nbed64.js
Nbed64 是一款非常强大的、通用的加密、解密库,GitHub开源地址如下
https://github.com/love915sss/js-nbed64-base64/
Nbed64加解密方案的主要能力
Nbed64共提供了12个API,分为3组,每组4个API。分别为:
-
动态加解密API组
- [nbed64StringEncryptEx()] 动态加密字符串,数据不变,密钥不变,但加密结果不重复,次次都变
- [nbed64StringDecryptEx()] 动态解密字符串,与 nbed64StringEncryptEx()是一对
- [nbed64BinaryEncryptEx()] 动态加密二进制,数据不变,密钥不变,但加密结果不重复,次次都变
- [nbed64BinaryDecryptEx()] 动态解密二进制,与 nbed64BinaryEncryptEx()是一对
-
对称加解密API组
- [nbed64StringEncrypt()] 对称加密字符串,数据不变,密钥不变,加密结果也不变,固定不变的
- [nbed64StringDecrypt()] 对称解密字符串,与 nbed64StringEncrypt()是一对
- [nbed64BinaryEncrypt()] 对称加密二进制,数据不变,密钥不变,加密结果也不变,固定不变的
- [nbed64BinaryDecrypt()] 对称解密二进制,与 nbed64BinaryEncrypt()是一对
-
标准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的设计初衷与特性
-
在Nbed64问世之前,市面上早就不缺对称加密算法,像AES、DES、TDEA、RC4、RC5等…已如雷贯耳,那么设计Nbed64的意义在哪里?答案是:可读性 + 通用性 + 轻量级。传统加密算法均有一个共性:主要服务于二进制数据安全。加密的结果不能字符化,而不能字符化就意味着:没有输入性,也没有可读性,不方便打印,不方便调试,等等…这是不利于现代可视化交互的,尤其像JS、PHP等脚本语言操作二进制很不方便!在WEB应用中,以及基于WEB的APP中,传统加密都很不方便作数据交互。怎么办呢,人们通常有两个选择:1. 转换成十六进制文本,2. 转换成Base64 文本。于是,网上到处都是AES、DES转Base64的帖子。您看,转了一圈,问题又回来了----那么我们为什么不直接在Base64编码的基础上来实现加密呢?为什么要脱裤子放屁呢?!于是,打造一套轻量的、通用的、可读的、开箱即用的加密方案,这,就是作者设计Nbed64的初衷!
-
Nbed64是一套[多语言] + [跨平台]的加解密库,Nbed64现已开源的语种有:GO版、C#版、C/C++版、Java版、Python版、JavaScript版、PHP版、E版,以及其它即将问世的语种版。这意味着,在所有主流编程语言中,但凡使用Nbed64加解密的数据,都均可无障碍交互。对不同语言的开发者,Nbed64的函数名,参数数量,参数位置, 执行结果,都是一致的、统一的。换句话说:使用Nbed64,前后端的开发者不论使用什么语言,对结果的认识是统一的,是没有分歧的,是可以无障碍交互数据的。
-
Nbed64是Network Bridge Encrypt Decrypt Base64的缩写,它是一套通用的、开源的、跨语言的、跨平台的卓越加密方案库。这套库的算法最早由合肥网桥网络科技的CEO设计于2014年,当初仅有C++一个版本,随后在其公司的生产环境中不断扩充和迭代,发展成了今天的多语种版。因此nb指的就是网桥科技,ed指的是加密和解密,64指的是该算法基于Base64编码框架。请不要误以为nbed意指’非对称的…',这样理解是错误的!强调一下, Nbed64是一套对称的加密方案,以及升级版的对称加密方案,人们很喜欢称之为:动态加密方案!
-
Nbed64对字符集的编码由内部算法实现,如:UTF-8,UTF-16,GBK等。它不依赖运行平台的API,不依赖运行环境的API。这意味着:在Windows、Linux、Unix、Mac、Android、Ios等不同的平台中运行的结果是一致的,安全的,稳定的。使用者使用跨平台语言开发时不必关心各系统平台之间的差异,也不必关心各种编码API在不同系统平台上使用的差异。开箱即用,编码问题与您无关。
-
Nbed64解密字符串时,会自动转换为当前语言的默认编码。如JavaScript环境中,被解密的字符串会自动转换为UTF-16,因为JavaScript的默认编码就是UTF-16,也只有UTF-16才不会乱码。强调一下,这里"自动"所指的意思是:不论原内容是UTF-8编码也好,是GBK编码也罢,只要在JS里解密字符串就必然是UTF-16,在C/C++里解密就必然是UTF-8。这样的设计很方便也很重要,众所周知,不同编程语言的默认编码是不同的,这意味着跨语言数据交互是需要彼此转换编码的,当彼此的默认编码不同时,开发者需要知已知彼才能转换编码,这是繁琐头疼的过程。而Nbed64解决了这样的尴尬,它在解密时扮演着自动翻译者的工作。这让开发者之间可以尽情的交互数据,而不必分散精力来处理彼此的编码问题。
-
Nbed64为何选择Base64作为加密框架呢?因为,二进制转成字符集的常用方案有两种:十六进制文本 和 Base64文本。其中十六进制需要两个字符表示一个字节,因此,十六进制占用内存的尺寸为:X * 2,所以,会有1倍的空间浪费。而Base64则用4个字符表示3个字节,因此,Base64占用内存的尺寸为:X / 3 * 4,所以,只有3分之1的空间浪费。在网络当道的今天,Nbed64只能选择更节约的Base64编码框架。同样能满足需求,当然要保持节约精神。
-
Nbed64的算法虽然基于Base64编码框架,但算法经过大量优化,性能远高于传统的Base64算法。作者曾在多平台下作过对比,各以10MB测试数据为例,Nbed64解密数据平均比传统的base64解码数据快100倍以上!主要原因是:传统的Base64解码时,通过遍历查找Base64映射表中的字符串来寻址,而Nbed64直接通过计算推导来寻址,因此少了一层for()循环,再加上其它各种优化,性能便有了极大的提升。经过压力测试,即使在移动浏览器中使用JavaScript编码512MB的数据也迅捷快速、毫无压力,其它语言和平台的性能自不必多说了。
-
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';