# linkdood-encrypt

> 描述：linkdood-encrypt 配合服务端采取aes与sm4 2套加密方式混合版 ###PS: key与iv 不要使用纯数字，尽量使用英文+常用符号定义 CryptoJS内部定义解析key与iv存在问题

Latest version **1.0.3** (published 2024-06-26) · ISC license · 0 weekly downloads

## Install

```sh
npm install linkdood-encrypt
pnpm add linkdood-encrypt
yarn add linkdood-encrypt
bun add linkdood-encrypt
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.3 |
| Published | 2024-06-26 |
| First published | 2022-07-19 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 6 |
| Unpacked size | 259.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |

## Links

- npm: https://www.npmjs.com/package/linkdood-encrypt
- npm.io page: https://npm.io/package/linkdood-encrypt

## Dependencies (6)

- [md5](https://npm.io/package/md5.md) ^2.3.0
- [buffer](https://npm.io/package/buffer.md) ^6.0.3
- [ieee754](https://npm.io/package/ieee754.md) ^1.2.1
- [base64-js](https://npm.io/package/base64-js.md) ^1.3.1
- [crypto-js](https://npm.io/package/crypto-js.md) ^4.2.0
- [to-arraybuffer](https://npm.io/package/to-arraybuffer.md) ^1.0.1

## Recent versions

- 1.0.3 (latest) — 2024-06-26
- 1.0.2 — 2024-06-14
- 1.0.1 — 2022-07-22
- 1.0.0 — 2022-07-19

## README

# linkdood-encrypt 加密库

描述：linkdood-encrypt 配合服务端采取aes与sm4 2套加密方式混合版
###PS: key与iv 不要使用纯数字，尽量使用英文+常用符号定义 CryptoJS内部定义解析key与iv存在问题

## 引用方式
1：可以通过script引用方式，详情查看index.html
```js
linkdoodEncrypt[方法]()
```
####例
```js

    var mode = '2';
    var key = 'key';
    var iv = 'iv';
    
    
    var encryptData = linkdoodEncrypt.CustomizeEncrypt('nj123456', mode, key, iv);
    console.log(encryptData);

    var decryptData = linkdoodEncrypt.CustomizeDecrypt(encryptData, mode, key, iv);
    console.log(decryptData);
```
2：可以通过npm下载方式引用
```js
import linkdoodEncrypt, {setConfig, CustomizeEncrypt, CustomizeDecrypt} from 'linkdood-encrypt';
```

####例
```js
import linkdoodEncrypt from 'linkdood-encrypt';

linkdoodEncrypt.setConfig(1, 'key', 'iv');

const encryptData = linkdoodEncrypt.CustomizeEncrypt('nj123456');
console.log(encryptData);

const decryptData = linkdoodEncrypt.CustomizeDecrypt(encryptData);
console.log(decryptData);
```

#### SM3
> Cryptographic Hash Algorithm.

```js
import { SM3 } from 'linkdood-encrypt';

console.log(SM3.digest('abc'))
console.log(SM3.digest('YWJj', 'base64'))
console.log(SM3.digest('616263', 'hex', 'base64'))
```

#### SM4
> Cryptographic Hash Algorithm.
```js
import { SM4 } from 'linkdood-encrypt';

const key = '0123456789abcdeffedcba9876543210' // Any string of 32 hexadecimal digits
const originalData = 'SM4 国标对称加密'

/**
 * Block cipher modes:
 * - ECB: electronic codebook
 * - CBC: cipher block chaining
 */

let encryptedData, decryptedData

// ECB
encryptedData = SM4.encrypt(originalData, key, {
  inputEncoding: 'utf8',
  outputEncoding: 'base64'
})
decryptedData = SM4.decrypt(encryptedData, key, {
  inputEncoding: 'base64',
  outputEncoding: 'utf8'
})

// CBC
const iv = '0123456789abcdeffedcba9876543210' // Initialization vector(any string of 32 hexadecimal digits)
encryptedData = SM4.encrypt(originalData, key, {
  iv: iv,
  mode: SM4.constants.CBC,
  inputEncoding: 'utf8',
  outputEncoding: 'hex'
})
decryptedData = SM4.decrypt(encryptedData, key, {
  iv: iv,
  mode: SM4.constants.CBC,
  inputEncoding: 'hex',
  outputEncoding: 'utf8'
})
```

### AES
> AES encryption
```js
import { AES } from 'linkdood-encrypt';

// Normal
const encrypted = AES.encrypt("Message", "Secret Passphrase");
const decrypted = AES.decrypt(encrypted, "Secret Passphrase");

// Custom Key and IV
const key = AES.enc.Hex.parse("000102030405060708090a0b0c0d0e0f");
const iv = AES.enc.Hex.parse("101112131415161718191a1b1c1d1e1f");
​
const encrypted = AES.encrypt("Message", key, { iv: iv });

// Block Modes and Padding
const encrypted = AES.encrypt("Message", "Secret Passphrase", {
  mode: AES.mode.CFB,
  padding: AES.pad.AnsiX923
});
```

### MD5
> MD5 Enc

```js
import { MD5 } from 'linkdood-encrypt';

console.log(MD5('message'));
```


## 提供方法
###CustomizeEncrypt 加密
| 参数  | 是否必填  | 默认值  | 描述 |
| ---- | ---- | ---- | ---- |
| data | 是   |     |  需要机密数据   |
| mode | 是\否   |  undefined \ config.mode   | 加密方式 1:商密 2:国密    |
| key  | 是\否   |  undefined \ config.key    | 密钥    |
| iv   | 是\否   |  undefined \ config.iv     | 偏移量    |

###CustomizeDecrypt 解密
| 参数  | 是否必填  | 默认值  |  描述 |
| ---- | ---- | ---- | ---- |
| data | 是   |     |  需要机密数据   |
| mode | 是\否   |  undefined \ config.mode   | 加密方式 1:商密 2:国密    |
| key  | 是\否   |  undefined \ config.key    | 密钥    |
| iv   | 是\否   |  undefined \ config.iv     | 偏移量    |

###setConfig 设置全局参数
| 参数  | 是否必填  | 默认值  | 描述 |
| ---- | ---- | ---- | ---- |
| mode | 是   |   1  | 加密方式 1:商密 2:国密    |
| key  | 是   |   空字符串   | 密钥    |
| iv   | 是   |   空字符串    | 偏移量    |


### SM3.digest(data, [inputEncoding], [outputEncoding])

Calculates the digest.

| Param          | Type                              | Default  | Description                                                                                                                                                                                      |
| -------------- | --------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| data           | `string`\|`ArrayBuffer`\|`Buffer` |          | Data message                                                                                                                                                                                     |
| inputEncoding  | `string`                          | `"utf8"` | The encoding of the `data` string, if `data` is not a string then `inputEncoding` is ignored.                                                                                                    |
| outputEncoding | `string`                          |          | If `outputEncoding` is provided, a string will be returned, otherwise a [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) is returned. |

### SM4.encrypt(data, key[, options])

Encrypt data.

| Param                  | Type                              | Default  | Description                                                                                                                                                                                      |
| ---------------------- | --------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| data                   | `string`\|`ArrayBuffer`\|`Buffer` |          | Plain message                                                                                                                                                                                    |
| key                    | `string`                          |          | Cipher key(any string of 32 hexadecimal digits)                                                                                                                                                  |
| options                | `object`                          |          | Options                                                                                                                                                                                          |
| options.mode           | `ECB` \| `CBC`                    | `ECB`    | Block cipher mode                                                                                                                                                                                |
| options.iv             | `string`                          |          | Initialization vector(any string of 32 hexadecimal digits)                                                                                                                                       |
| options.inputEncoding  | `string`                          | `"utf8"` | The encoding of the plain `data` string,if `data` is not a string then `inputEncoding` is ignored.                                                                                               |
| options.outputEncoding | `string`                          |          | If `outputEncoding` is provided, a string will be returned, otherwise a [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) is returned. |

### SM4.decrypt(data, key[, options])

Decrypt data.

| Param                  | Type                              | Default | Description                                                                                                                                                                                      |
| ---------------------- | --------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| data                   | `string`\|`ArrayBuffer`\|`Buffer` |         | Ciphered data                                                                                                                                                                                    |
| key                    | `string`                          |         | Cipher key(any string of 32 hexadecimal digits)                                                                                                                                                  |
| options                | `object`                          |         | Options                                                                                                                                                                                          |
| options.mode           | `ECB` \| `CBC`                    | `ECB`   | Block cipher mode                                                                                                                                                                                |
| options.iv             | `string`                          |         | Initialization vector(any string of 32 hexadecimal digits)                                                                                                                                       |
| options.inputEncoding  | `string`                          |         | The encoding of the plain `data` string,if `data` is not a string then `inputEncoding` is ignored.                                                                                               |
| options.outputEncoding | `string`                          |         | If `outputEncoding` is provided, a string will be returned, otherwise a [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) is returned. |

### AES
参看使用示例

### MD5
参看使用示例

---
_Source: https://npm.io/package/linkdood-encrypt · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
