An open API service indexing awesome lists of open source software.

https://github.com/johniexu/decrypt-core

A simple wrapper for the TDEA (Triple DES) algorithm in crypto-js, which is more concise and easier to use, with support for a wider range of environments. 一个对 crypto-js 中 TDEA(Triple DES) 算法的简单包装,更简洁更易于使用,支持环境更丰富
https://github.com/johniexu/decrypt-core

3des des tdea triple-dea triple-des

Last synced: about 1 month ago
JSON representation

A simple wrapper for the TDEA (Triple DES) algorithm in crypto-js, which is more concise and easier to use, with support for a wider range of environments. 一个对 crypto-js 中 TDEA(Triple DES) 算法的简单包装,更简洁更易于使用,支持环境更丰富

Awesome Lists containing this project

README

          

# decrypt-core

[![NPM version][npm-image]][npm-url] [![NPM downloads](https://img.shields.io/npm/dm/decrypt-core)](https://www.npmjs.com/package/decrypt-core)

[npm-image]: https://img.shields.io/npm/v/decrypt-core
[npm-url]: https://www.npmjs.com/package/decrypt-core

一个对 [crypto-js](https://github.com/brix/crypto-js) 中 [TDEA(Triple DES)](https://zh.wikipedia.org/wiki/3DES) 算法的简单包装,更简洁更易于使用,支持环境更丰富

## 特性

- 使用简单-提供加密、解密、签名函数
- 稳定性高-公司真实项目接入使用
- 支持多环境-支持 Node.js、web 浏览器、各种小程序、RN 及 weex 跨平台框架

## 使用

各版本变更记录在 [CHANGELOG.md](./CHANGELOG.md) 中

### 数据加解密

全局对外提供了两个核心方法 `encrypt` 和 `decrypt`,引入项目后直接使用即可

- ESM使用

> 在支持ES6 Module时可使用import导入

```js
import { encrypt, decrypt } from 'decrypt-core'
const key = '15e89af5da164202a4f839a2f1e7320a'
const data = '{"page":1,"size":10}'
const encData = encrypt(data, key)
const decData = decrypt(encData, key)
console.log(`加密后数据:${encData}\n解密后数据:${decData}`)
```

- CJS使用

```js
const { encrypt, decrypt } = require('decrypt-core')
const key = '15e89af5da164202a4f839a2f1e7320a'
const data = '{"page":1,"size":10}'
const encData = encrypt(data, key)
const decData = decrypt(encData, key)
console.log(`加密后数据:${encData}\n解密后数据:${decData}`)
```

- UMD使用

> 使用`script`标签引入`dist/index.umd.min.js`文件后,模块导出的全局变量在`window.decryptCore` 上

```html


var key = '15e89af5da164202a4f839a2f1e7320a'
const data = '{"page":1,"size":10}'
const encData = window.decryptCore.encrypt(data, key)
const decData = window.decryptCore.decrypt(encData, key)
console.log(`加密后数据:${encData}\n解密后数据:${decData}`)

```

### 校验加密数据格式

全局对外提供了工具方法 `isEncryptedData` ,可用于检查数据是否是数据加密方法 `encrypt` 返回的数据格式

```js
import { isEncryptedData } from 'decrypt-core'

isEncryptedData('123445') // false 不是加密数据格式

isEncryptedData('93468187855434817844048812694314B1382F05951542D6B98311D90CD0B97E22E6D052DE6A9B83381E97E8B23AC5209F8D4E6428C697EAEFEB495FCF7673E48E4D7087A2B24CEAFE127793421DAB91FCD411D04B85BCC5427DB76E6D3353BE8897BE1DAE3D28DBDF053D7707BACF0AC77CCF0426BA8F76E9FC578D8D91803289F53AD66A70AF73B0756B97F314D33997191E8E976EDFAFA46A75CC393A88B1') // true 是加密数据格式
```

### 加签验签

> v1.2.0 及以上版本支持

全局对外提供两个签名相关方法 `createSign` 和 `verifySign`,可用于对数据进行加签、验签

```js
import { createSign, verifySign } from 'decrypt-core'
const data = { page: 1, size: 10 }
const key = '15e89af5da164202a4f839a2f1e7320a'
const sign = createSign(data, key) // 返回签名字符串
const dataSigned1 = { ...data, sign: 'aaaa' }
const dataSigned2 = { ...data, sign }
verifySign(data, key) // 报错:signature field not found
verifySign(dataSigned1, key) // false 验签未通过
verifySign(dataSigned2, key) // true 验签通过

```

## 相关项目

- CLI命令行工具-[xtjk-decrypt](https://github.com/JohnieXu/xtjk-decrypt)
- Chrome插件-[xtjk-decrypt-chrome](https://github.com/JohnieXu/xtjk-decrypt-chrome)
- 微信小程序示例-[xtjk-decrypt-mp](https://github.com/JohnieXu/xtjk-decrypt-mp)

## NPM脚本

- `lint`-代码格式检查
- `test`-执行测试用例
- `test:coverage`-统计测试覆盖率
- `coverage`-统计测试覆盖率并在 coverage 目录生成结果详情
- `build`-使用[father](https://github.com/umijs/father)进行打包
- `anaysis`-使用当前机器进行加密比率、速率分析
- `anaysis:write`-使用当前机器进行加密比率、速率分析并写入结果到 README.md

## 压缩率

> `npm run anaysis`

点击查看压缩率明细

```json
[
{
"length": "2byte",
"encLength": "64byte",
"time": "4ms",
"ratio": "3200.0000%",
"type": "英文"
},
{
"length": "100byte",
"encLength": "256byte",
"time": "5ms",
"ratio": "256.0000%",
"type": "英文"
},
{
"length": "1000byte",
"encLength": "2048byte",
"time": "10ms",
"ratio": "204.8000%",
"type": "英文"
},
{
"length": "10000byte",
"encLength": "20064byte",
"time": "101ms",
"ratio": "200.6400%",
"type": "英文"
},
{
"length": "50000byte",
"encLength": "100064byte",
"time": "283ms",
"ratio": "200.1280%",
"type": "英文"
},
{
"length": "100000byte",
"encLength": "200064byte",
"time": "510ms",
"ratio": "200.0640%",
"type": "英文"
},
{
"length": "3byte",
"encLength": "64byte",
"time": "11ms",
"ratio": "2133.3333%",
"type": "中文"
},
{
"length": "102byte",
"encLength": "480byte",
"time": "2ms",
"ratio": "470.5882%",
"type": "中文"
},
{
"length": "1002byte",
"encLength": "4064byte",
"time": "13ms",
"ratio": "405.5888%",
"type": "中文"
},
{
"length": "10002byte",
"encLength": "40000byte",
"time": "115ms",
"ratio": "399.9200%",
"type": "中文"
},
{
"length": "50001byte",
"encLength": "199712byte",
"time": "479ms",
"ratio": "399.4160%",
"type": "中文"
},
{
"length": "100002byte",
"encLength": "399296byte",
"time": "922ms",
"ratio": "399.2880%",
"type": "中文"
},
{
"length": "5byte",
"encLength": "160byte",
"time": "1ms",
"ratio": "3200.0000%",
"type": "中英混合"
},
{
"length": "100byte",
"encLength": "2048byte",
"time": "5ms",
"ratio": "2048.0000%",
"type": "中英混合"
},
{
"length": "1000byte",
"encLength": "20032byte",
"time": "55ms",
"ratio": "2003.2000%",
"type": "中英混合"
},
{
"length": "10000byte",
"encLength": "199968byte",
"time": "502ms",
"ratio": "1999.6800%",
"type": "中英混合"
},
{
"length": "50000byte",
"encLength": "999392byte",
"time": "2669ms",
"ratio": "1998.7840%",
"type": "中英混合"
},
{
"length": "100000byte",
"encLength": "1998720byte",
"time": "4953ms",
"ratio": "1998.7200%",
"type": "中英混合"
}
]
```

## 开源协议

[MIT License](./LICENSE)

## 参与贡献

### PR

### 发包工作流

详细版(手动):

1. 修改代码并执行测试 `npm test`
2. commit 代码 `git commit -m "..."`
3. 修改 `package.json` 版本号
4. 生成变更记录 `npm run changelog`
5. commit `package.json` 和 `CHANGELOG.md` 文件
6. 创建 Tag `git tag xxx`
7. 推送 Tag `git push origin master --tags`
8. 构建项目 `npm run build`
9. 发布 npm 包 `npm publish`

简洁版(自动):***推荐使用**

1. 修改代码并执行测试 `npm test`
2. 更新版本号、生成变更记录、创建 Tag `npm version `,例如:`npm version patch`
3. 推送 Tag `git push origin master --tags`
4. 在 github 仓库中[创建一个 Release](https://github.com/JohnieXu/decrypt-core/releases/new),然后 [Action](https://github.com/JohnieXu/decrypt-core/actions/workflows/node.js.cd.yml) 会自动发布 npm 包

变更记录生成请参考:[conventional-changelog](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-cli#readme)