请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

签名校验失败

我这边校验签名一直是false不知道为什么

// 2. 签名
function sign({from, to, amount, timestamp}) {
    const bufferMsg = Buffer.from(`${timestamp}-${amount}-${from}-${to}`);
    let signature = Buffer.from(keypair.sign(bufferMsg).toDER()).toString('hex');
    return signature;
}
// 3. 校验签名
function verify({from, to, amount, timestamp, signature}, pub) {
    // 校验只有公钥
    const keypairTemp = ec.keyFromPublic(pub, 'hex');
    const bufferMsg = Buffer.from(`${timestamp}-${amount}-${from}-${to}`);
    return keypairTemp.verify(bufferMsg, signature);
}

请帮我看一下哪里有问题吗

正在回答

4回答

```js

function sign({ from, to, amount, timestamp }) {

const keypairTemp = ec.keyFromPrivate(keys.prv)

const bufferMsg = Buffer.from(`${timestamp}-${amount}-${from}-${to}`)

// console.log(bufferMsg)

let signature = Buffer.from(keypairTemp.sign(bufferMsg).toDER()).toString('hex')

return signature

}

// 3. 校验签名

function verify({ from, to, amount, timestamp, signature }) {

// 校验只有公钥

const keypairTemp = ec.keyFromPublic(keys.pub, 'hex')

const bufferMsg = Buffer.from(`${timestamp}-${amount}-${from}-${to}`)

console.log(bufferMsg)

return keypairTemp.verify(bufferMsg, signature)

}

console.log(keys)


const obj = { from:'woniu', to:'imooc', amount:10, timestamp:1553757424559 }

const signer = sign(obj)

console.log(signer)


obj.signature = signer

console.log(obj)

console.log(verify(obj))


```


0 回复 有任何疑惑可以回复我~
  • 提问者 慕盖茨1271144 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-03-28 15:59:58
  • 提问者 慕盖茨1271144 #2
    4-10 和4-11这部分代码都是这样的,请老师修改说明一下,截图我放在下面了
    回复 有任何疑惑可以回复我~ 2019-03-28 16:01:03
提问者 慕盖茨1271144 2019-03-28 15:59:35

https://img1.sycdn.imooc.com//szimg/5c9c7e9400011b4912380754.jpg

4-10 和4-11这部分代码都是这样的,请老师修改说明一下

0 回复 有任何疑惑可以回复我~
提问者 慕盖茨1271144 2019-03-28 14:52:53
// 加密 安全
// RSA非对称加密

// 1. 生成公私钥对
// 2. 公钥直接当成地址用(或者截取公钥前20位)
// 3. 公钥可以通过私钥算出来
const fs = require('fs')
const EC = require('elliptic').ec
const ec = new EC('secp256k1')
let keypair = ec.genKeyPair()

const keys = generateKeys()
// 用私钥算出公钥
function getPub (prv) {
return ec.keyFromPrivate(prv).getPublic('hex').toString()
}
// 1. 获取公私钥对(持久化)
function generateKeys () {
const fileName = './wallet.json'
try {
let res = JSON.parse(fs.readFileSync(fileName))
if (res.prv && res.pub && getPub(res.prv) === res.pub) {
keypair.ec.keyFromPrivate(res.prv)
return res
} else {
// 验证失败 重新生成
throw new Error('not valid wallet.json')
}
} catch (error) {
console.log('生成')
// 文件不存在 或者文件内容不合法 重新生成
const res = {
prv: keypair.getPrivate('hex').toString(),
pub: keypair.getPublic('hex').toString()
}
fs.writeFileSync(fileName, JSON.stringify(res))
return res
}
}
// 2. 签名
function sign ({ from, to, amount, timestamp }) {
const bufferMsg = Buffer.from(`${timestamp}-${amount}-${from}-${to}`)
let signature = Buffer.from(keypair.sign(bufferMsg).toDER()).toString('hex')
return signature
}
// 3. 校验签名
function verify ({ from, to, amount, timestamp, signature }, pub) {
// 校验只有公钥
const keypairTemp = ec.keyFromPublic(pub, 'hex')
const bufferMsg = Buffer.from(`${timestamp}-${amount}-${from}-${to}`)
return keypairTemp.verify(bufferMsg, signature)
}

module.exports = { sign, verify, keys }

这是我完整的rsa.js文件,校验不通过,请老师帮忙看一下哪里有问题

0 回复 有任何疑惑可以回复我~
  • 函数微调一下,你这个好像每次都用了新生城的keypair 所以签名会变
    ```js
    function sign({ from, to, amount, timestamp }) {
        const keypairTemp = ec.keyFromPrivate(keys.prv)
        
        const bufferMsg = Buffer.from(`${timestamp}-${amount}-${from}-${to}`)
        // console.log(bufferMsg)
        let signature = Buffer.from(keypairTemp.sign(bufferMsg).toDER()).toString('hex')
        return signature
    }
    // 3. 校验签名
    function verify({ from, to, amount, timestamp, signature }) {
        // 校验只有公钥
        const keypairTemp = ec.keyFromPublic(keys.pub, 'hex')
        const bufferMsg = Buffer.from(`${timestamp}-${amount}-${from}-${to}`)
        console.log(bufferMsg)
        return keypairTemp.verify(bufferMsg, signature)
    }
    console.log(keys)
    
    const obj = { from:'woniu', to:'imooc', amount:10, timestamp:1553757424559 }
    const signer = sign(obj)
    console.log(signer)
    
    obj.signature = signer
    console.log(obj)
    console.log(verify(obj))
    ```
    回复 有任何疑惑可以回复我~ 2019-03-28 15:47:24
慕瓜8449030 2019-03-28 14:28:35

完整的代码能贴一下吗? sign里面的keypair你是怎么生成的?

0 回复 有任何疑惑可以回复我~
  • 提问者 慕盖茨1271144 #1
    老师我把代码放上去了,请帮我看一下吧
    回复 有任何疑惑可以回复我~ 2019-03-28 14:53:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信