远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • 把npm依赖转换为本地依赖
  • 从零开始写一个vuepress插件
  • dojo利用promise实现多个异步校验
  • 使用nodejs实现ed25519的公钥加密和私钥解密
  • js正则替换和删除字符串
  • 纯css实现下拉菜单
  • css背景上下渐变的实现
  • npm切换为阿里云国内源码
  • vdoing主题vuepress的v1版本集成Artalk
  • node发送邮件
  • 两栏布局左右拖拽效果实现方案
  • 国际化
  • vue3的reactive和ref的区别
  • Next-js组件使用泛型类型传递异步数据
  • 从零开始使用react写一个随机变色的标签组件
  • yarn和npm设置国内镜像源
  • vite使用nodeJS内置的模块
  • 使用vitest对vite项目进行单元测试
  • Web字体简介_TTF_OTF_WOFF_EOT以及SVG
  • Chrome插件开发background_js支持跨域请求与返回async和await的处理
  • Nuxt3和Vue3集成FontAwesome
  • babel运行nodejs
  • 使用cross-fetch替换node-fetch和isomorphic-fetch
  • dotenv加载变量
  • MacOS解决npm权限不足问题
  • 在Vite+TypeScript的项目中使用~和@代替src根路径的方法
  • 前端开发
terwer
2022-11-26

使用nodejs实现ed25519的公钥加密和私钥解密

主要使用了 ed25519 库

加解密和验证代码

// Common.js and ECMAScript Modules (ESM)
import * as ed from '@noble/ed25519';
// If you're using single file, use global variable instead: `window.nobleEd25519`

const verifyEd = async function (prikey, pubkey) {
    console.log("你输入的私钥是:" + prikey)
    console.log("环境变量中的公钥是:" + pubkey)

    // ====================
    // 新私钥开始
    // ====================
    // const newPrivateKey = ed.utils.randomPrivateKey();
    // const privateKeyStr = Buffer.from(newPrivateKey).toString('base64');
    // console.log("new privateKey=>", privateKeyStr)
    // ====================
    // 新私钥结束
    // ====================
  
    const privateKeyStr = prikey

    const privateKey = Buffer.from(privateKeyStr, 'base64');
    // console.log("parsed privateKey=>", privateKey)

    // ====================
    // 新公钥开始
    // ====================
    // const newPublicKey = await ed.getPublicKey(privateKey);
    // const publicKeyStr = Buffer.from(newPublicKey).toString('base64');
    // console.log("new publicKey=>", publicKeyStr)
    // ====================
    // 新公钥结束
    // ====================
  
    const publicKeyStr = pubkey

    const publicKey = Buffer.from(publicKeyStr, 'base64');
    // console.log("parsed publicKey=>", publicKey)

    try {
        const valiPass = "123456";
        const message = Uint8Array.from(valiPass, x => x.charCodeAt(0))
        // const messageStr = Buffer.from(message).toString('base64');
        // console.log("校验密码:", valiPass)

        const signature = await ed.sign(message, privateKey);
        const isValid = await ed.verify(signature, message, publicKey);
        // console.log("验证结果:", isValid ? "有效" : "无效")
        return isValid;
    } catch (e) {
        console.warn("校验失败,请检查密码", e)
        return false;
    }
}

const privateKeyStr = "prikey";
const publicKeyStr = "pubkey"
const valiResult = verifyEd(privateKeyStr, publicKeyStr)
valiResult.then(function(item){
    console.log("item=>", item)
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
编辑 (opens new window)
#ed25519#node#password#私钥#使用#实现#加密#解密
上次更新: 2023/01/02, 03:49:04
dojo利用promise实现多个异步校验
js正则替换和删除字符串

← dojo利用promise实现多个异步校验 js正则替换和删除字符串→

最近更新
01
Fri Dec 16 2022 00:00:00 GMT+0000 (Coordinated Universal Time)
12-16
02
挂件模式用挂载菜单的方式使用
12-15
03
README
12-07
更多文章>
Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式