This commit is contained in:
Luk Lu
2022-07-03 16:03:09 +08:00
parent dff0b62d64
commit 5bfd536c03
4 changed files with 290 additions and 268 deletions

View File

@@ -32,29 +32,29 @@ npm install git+https://git.faronear.org/npm/tic-crypto#RELEASE_OR_BRANCH --save
基本用法示例:
```
let ticrypto=require('tic-crypto') // 引用
let sw=ticrypto.randomSecword() // 生成一个随机的助记词(即密语)。或者使用现成的密语。
let kp=ticrypto.secword2keypair(sw) // 把密语转换成公私钥
let address=ticrypto.secword2address(sw) // 把密语转换成地址
let ticc=require('tic-crypto') // 引用
let sw=ticc.randomize_secword() // 生成一个随机的助记词(即密语)。或者使用现成的密语。
let kp=ticc.secword_to_keypair({secword:sw}) // 把密语转换成公私钥
let address=ticc.secword_to_address({secword:sw}) // 把密语转换成地址
```
## 其他
```
const keyPair = crypto.generateKeyPairSync('rsa', {
modulusLength: 520,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
const keyPair = crypto.generateKeyPairSync('rsa', {
modulusLength: 520,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: ''
}
})
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: ''
}
})
```
这样生成的 keyPair.privateKey 开头是 -----BEGIN ENCRYPTED PRIVATE KEY-----
@@ -62,19 +62,19 @@ const keyPair = crypto.generateKeyPairSync('rsa', {
如果直接
```
crypto.privateEncrypt(kp.privateKey, Buffer.from('sdafasfdsaf'))
crypto.privateEncrypt(kp.privateKey, Buffer.from('sdafasfdsaf'))
```
会报错
```
Uncaught TypeError: Passphrase required for encrypted key
Uncaught TypeError: Passphrase required for encrypted key
```
所以要这样才行
```
crypto.privateEncrypt({key:kp.privateKey, passphrase:''}, Buffer.from('sdafasfdsaf'))
crypto.privateEncrypt({key:kp.privateKey, passphrase:''}, Buffer.from('sdafasfdsaf'))
```
我从 https://www.cnblogs.com/chyingp/p/nodejs-asymmetric-enc-dec.html 抄到一个 privateKey 可以直接使用,不需要 passphrase
@@ -86,14 +86,14 @@ crypto.privateEncrypt({key:kp.privateKey, passphrase:''}, Buffer.from('sdafasfds
可以直接
```
crypto.publicEncrypt(kp.publicKey, Buffer.from('sdafasfdsaf'))
crypto.publicEncrypt(kp.publicKey, Buffer.from('sdafasfdsaf'))
```
返回 Buffer。每次结果不一样
似乎 crypto 一定要 rsa 公私钥才可以用加解密ticrypto.randomKeypair() 生成的 ecc 公私钥不行。
似乎 crypto 一定要 rsa 公私钥才可以用加解密ticc.randomize_keypair() 生成的 ecc 公私钥不行。
而 eccrypto 和 eccrypto-js 可以用。eccrypto.generateKeyPair() 生成的和 ticrypto.randomKeypair() 一样
而 eccrypto 和 eccrypto-js 可以用。eccrypto.generateKeyPair() 生成的和 ticc.randomize_keypair() 一样
eccrypto 在 windows 上的安装有麻烦,一来需要手工安装 OpenSSL 到 c:\openssl-win64\,二来 openssl 1.1.0 起把 libeay32.lib 改名为 libcrypto.dll而 eccrypto 需要 c:\openssl-win64\lib\libeay32.lib会报错
@@ -101,9 +101,9 @@ eccrypto-js 在 devDependencies 里继承了 eccrypto因此 npm i --productio
base32 有多种字符集:[Base32 - Wikipedia](https://en.wikipedia.org/wiki/Base32)
IPFS用的是 RFC4648字符集
IPFS 用的是 RFC4648 字符集
- 从数到数符串Number(数).toString(进制数)0x数.toString(进制数), 0b数.toString(进制数)
- 从数到数符串Number(数).toString(进制数)0x 数.toString(进制数), 0b 数.toString(进制数)
- 从数符串到数字parseInt(str, 进制数)
- Buffer到数符串: Buffer.toString(编码方案例如'hex','base64',默认'utf8')
- 字符串到Buffer: Buffer.from(data, 编码方案如'hex','base64',默认'utf8')
- Buffer 到数符串: Buffer.toString(编码方案例如'hex','base64',默认'utf8')
- 字符串到 Buffer: Buffer.from(data, 编码方案如'hex','base64',默认'utf8')