crypto.sign/verify 在浏览器中不存在,换回原来的方案
This commit is contained in:
		
							parent
							
								
									8873cd8884
								
							
						
					
					
						commit
						30706da9fb
					
				
							
								
								
									
										19
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								index.js
									
									
									
									
									
								
							@ -279,11 +279,11 @@ class TICrypto {
 | 
				
			|||||||
      } else if (seckey.length === 64) {
 | 
					      } else if (seckey.length === 64) {
 | 
				
			||||||
        // 纯 crypto
 | 
					        // 纯 crypto
 | 
				
			||||||
        let seckeyPEM = await new keyman.Key('oct', this.hex2buf(seckey), { namedCurve: 'P-256K' }).export('pem') // 私钥导出的der格式为144字节。
 | 
					        let seckeyPEM = await new keyman.Key('oct', this.hex2buf(seckey), { namedCurve: 'P-256K' }).export('pem') // 私钥导出的der格式为144字节。
 | 
				
			||||||
        // let signer = crypto.createSign(my.HASHER_LIST.indexOf(hasher) >= 0 ? hasher : my.HASHER) // 注意,不知为何,hasher必须含有'sha'才能完成签名,例如 sha1, sha256, sha512, sha3, RSA-SHA1, id-rsassa-pkcs1-v1_5-with-sha3-224, 其他都会报错。
 | 
					        let signer = crypto.createSign(my.HASHER_LIST.indexOf(hasher) >= 0 ? hasher : my.HASHER) // 注意,不知为何,hasher必须含有'sha'才能完成签名,例如 sha1, sha256, sha512, sha3, RSA-SHA1, id-rsassa-pkcs1-v1_5-with-sha3-224, 其他都会报错。
 | 
				
			||||||
        // signer.update(this.hash(data)).end()
 | 
					        signer.update(this.hash(data)).end()
 | 
				
			||||||
        // let signature = signer.sign(seckeyPEM, 'hex')
 | 
					        let signature = signer.sign(seckeyPEM, 'hex')
 | 
				
			||||||
        // since nodejs 12, 有了 crypto.sign 方法:
 | 
					        // since nodejs 12, 有了 crypto.sign 方法,但在浏览器中无效:
 | 
				
			||||||
        let signature = crypto.sign(my.HASHER_LIST.indexOf(hasher) >= 0 ? hasher : my.HASHER, Buffer.from(this.hash(data)), seckeyPEM).toString('hex')
 | 
					        // let signature = crypto.sign(my.HASHER_LIST.indexOf(hasher) >= 0 ? hasher : my.HASHER, Buffer.from(this.hash(data)), seckeyPEM).toString('hex')
 | 
				
			||||||
        return signature // 发现同样的输入,nodejs里每次调用会生成不同的 signature, 且长度不定(140,142,144 hex) 但都可以通过 verify。但在浏览器里调用,signature却是固定的。
 | 
					        return signature // 发现同样的输入,nodejs里每次调用会生成不同的 signature, 且长度不定(140,142,144 hex) 但都可以通过 verify。但在浏览器里调用,signature却是固定的。
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -325,13 +325,8 @@ class TICrypto {
 | 
				
			|||||||
        // let verifier = crypto.createVerify(my.HASHER_LIST.indexOf(hasher) >= 0 ? hasher : my.HASHER)
 | 
					        // let verifier = crypto.createVerify(my.HASHER_LIST.indexOf(hasher) >= 0 ? hasher : my.HASHER)
 | 
				
			||||||
        // verifier.update(this.hash(data)).end() // end() 在 nodejs 12 里返回verifier自身,但在浏览器里返回 undefined,因此不能串联运行。
 | 
					        // verifier.update(this.hash(data)).end() // end() 在 nodejs 12 里返回verifier自身,但在浏览器里返回 undefined,因此不能串联运行。
 | 
				
			||||||
        // let verified = verifier.verify(pubkeyPEM, signature, 'hex') // 如果给signature添加1位hex,crypto 的 verify结果也是true! 估计因为一位hex不被转成字节。但减少1位会导致false
 | 
					        // let verified = verifier.verify(pubkeyPEM, signature, 'hex') // 如果给signature添加1位hex,crypto 的 verify结果也是true! 估计因为一位hex不被转成字节。但减少1位会导致false
 | 
				
			||||||
        // since nodejs 12, 有了 crypto.verify 方法:
 | 
					        // since nodejs 12, 有了 crypto.verify 方法,但在浏览器中无效:
 | 
				
			||||||
        let verified = crypto.verify(
 | 
					        // let verified = crypto.verify(my.HASHER_LIST.indexOf(hasher) >= 0 ? hasher : my.HASHER, Buffer.from(this.hash(data)), pubkeyPEM, Buffer.from(signature, 'hex'))
 | 
				
			||||||
          my.HASHER_LIST.indexOf(hasher) >= 0 ? hasher : my.HASHER,
 | 
					 | 
				
			||||||
          Buffer.from(this.hash(data)),
 | 
					 | 
				
			||||||
          pubkeyPEM,
 | 
					 | 
				
			||||||
          Buffer.from(signature, 'hex')
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        return verified
 | 
					        return verified
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user