97 lines
2.7 KiB
Markdown
97 lines
2.7 KiB
Markdown
# tic.crypto
|
||
|
||
时光链区块链密码学算法工具库:为区块链相关应用开发提供一套底层的基础算法工具库,用来处理哈希、加解密、签名、助记词、等等。
|
||
|
||
- 支持 md5、sha256 等算法的哈希
|
||
- 基于 bip39 等算法的助记词生成、检验
|
||
- 基于 secp256k1 等曲线算法的签名、交易的加解密
|
||
- 其他辅助算法工具
|
||
|
||
## 硬件环境
|
||
|
||
- 机型:Mac 或 PC 机
|
||
- 内存:8GB 以上
|
||
- 硬盘:500G 以上
|
||
|
||
## 软件环境
|
||
|
||
- 操作系统:跨平台通用,支持 MacOS, Linux, Windows
|
||
- 开发环境:推荐 Visual Studio Code
|
||
- 运行环境:nodejs 12.16 版本
|
||
|
||
## 安装指南
|
||
|
||
在前后端软件的 package.json 的依赖清单中引入本库:
|
||
|
||
```
|
||
npm install git+https://git.faronear.org/npm/tic.crypto#RELEASE_OR_BRANCH --save
|
||
```
|
||
|
||
## 用法
|
||
|
||
基本用法示例:
|
||
|
||
```
|
||
let ticCrypto=require('tic.crypto') // 引用
|
||
let sw=ticCrypto.randomSecword() // 生成一个随机的助记词(即密语)。或者使用现成的密语。
|
||
let kp=ticCrypto.secword2keypair(sw) // 把密语转换成公私钥
|
||
let address=ticCrypto.secword2address(sw) // 把密语转换成地址
|
||
```
|
||
|
||
## 其他
|
||
|
||
```
|
||
const keyPair = crypto.generateKeyPairSync('rsa', {
|
||
modulusLength: 520,
|
||
publicKeyEncoding: {
|
||
type: 'spki',
|
||
format: 'pem'
|
||
},
|
||
|
||
privateKeyEncoding: {
|
||
type: 'pkcs8',
|
||
format: 'pem',
|
||
cipher: 'aes-256-cbc',
|
||
passphrase: ''
|
||
}
|
||
})
|
||
```
|
||
|
||
这样生成的 keyPair.privateKey 开头是 -----BEGIN ENCRYPTED PRIVATE KEY-----
|
||
|
||
如果直接
|
||
```
|
||
crypto.privateEncrypt(kp.privateKey, Buffer.from('sdafasfdsaf'))
|
||
```
|
||
会报错
|
||
```
|
||
Uncaught TypeError: Passphrase required for encrypted key
|
||
```
|
||
所以要这样才行
|
||
```
|
||
crypto.privateEncrypt({key:kp.privateKey, passphrase:''}, Buffer.from('sdafasfdsaf'))
|
||
```
|
||
我从 https://www.cnblogs.com/chyingp/p/nodejs-asymmetric-enc-dec.html 抄到一个 privateKey 可以直接使用,不需要 passphrase
|
||
|
||
返回 Buffer。每次结果都一样
|
||
|
||
|
||
这样生成的 keyPair.publicKey 开头是 -----BEGIN PUBLIC KEY-----
|
||
|
||
可以直接
|
||
```
|
||
crypto.publicEncrypt(kp.publicKey, Buffer.from('sdafasfdsaf'))
|
||
```
|
||
|
||
返回 Buffer。每次结果不一样
|
||
|
||
|
||
|
||
似乎 crypto 一定要 rsa 公私钥才可以用加解密,ticCrypto.randomKeypair() 生成的 ecc 公私钥不行。
|
||
|
||
而 eccrypto 和 eccrypto-js 可以用。eccrypto.generateKeyPair() 生成的和 ticCrypto.randomKeypair() 一样
|
||
|
||
eccrypto 在 windows 上的安装有麻烦,一来需要手工安装 OpenSSL 到 c:\openssl-win64\,二来 openssl 1.1.0 起把 libeay32.lib 改名为 libcrypto.dll,而 eccrypto 需要 c:\openssl-win64\lib\libeay32.lib,会报错
|
||
|
||
eccrypto-js 在 devDependencies 里继承了 eccrypto,因此 npm i --production 即可
|