这篇博客的由来是源于工作中一个java项目的配置项是加密后的私钥,私钥是由其他项目中调用web3生成随机账号得到的,而加密方法只是简单在java项目中执行代码得到。这便导致两步操作有点割裂,需要有一个脚本来完成生成私钥和加密私钥,减少重复操作且方便不同服务器执行。
目录
- CLI工具是什么
- 操作步骤
- 创建项目
- 创建可执行文件
- package.json中设置bin入口文件
- 运行npm link
- 发布到npm
- 登录npm
- 通过命令安装CLI工具
- 至此,艺术已成
- 书籍推荐
- 书籍名称:《Ubuntu Linux运维从零开始学》
- 内容介绍
- 适合人群
- 如何领书
- 方式一 博客送书
- 方式二 公众号送书
- 方式三 粉丝群送书
- 自主购买
- 最后
由于是将java代码中的逻辑搬到了js上,所以考虑到了制作CLI工具
CLI工具是什么
CLI 工具,即命令行界面(Command-Line Interface)工具,是一种允许用户通过文本命令与计算机程序或操作系统交互的界面。CLI 工具通常在终端或控制台窗口中运行,用户输入文本命令来执行特定的操作或获取信息。
简单理解是一种通过命令行来在运行一些代码,来实现某些功能的工具或者应用。可以减少开发中的一些低级重复劳动,或者规范开发工作流,提高开发效率。
操作步骤
创建项目
- 创建一个新的项目目录
mkdir generateEthKeys
- 进入项目目录后,初始化npm
npm init -y
创建可执行文件
可执行文件即真正的代码逻辑文件,如我是加解密的代码,则创建了generateEthKeys.js文件,代码内容不需要解释了,注释应该很清晰了。
#!/usr/bin/env node
console.log('Hello, CLI world!');
const CryptoJS = require('crypto-js');
const Web3 = require('web3');
const web3 = new Web3(Web3.givenProvider || 'http://localhost:8545');
// AES 加密密钥,长度必须为16字节
const AES_KEY = 'kunzhiSayNodeCLI';
// 生成随机私钥
const account = web3.eth.accounts.create();
const privateKey = account.privateKey;
// 加密
const encryptedPrivateKey = encrypt(privateKey, AES_KEY);
console.log('Encrypted Private Key:', encryptedPrivateKey);
// 解密
const decryptedPrivateKey = decrypt(encryptedPrivateKey, AES_KEY);
console.log('Decrypted Private Key:', decryptedPrivateKey);
// 获取地址
const address = account.address;
console.log('Address:', address);
function encrypt(data, key) {
const keyBytes = CryptoJS.enc.Utf8.parse(key);
const dataBytes = CryptoJS.enc.Utf8.parse(data);
const encrypted = CryptoJS.AES.encrypt(dataBytes, keyBytes, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
function decrypt(data, key) {
const keyBytes = CryptoJS.enc.Utf8.parse(key);
const decrypted = CryptoJS.AES.decrypt(data, keyBytes, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
package.json中设置bin入口文件
{
"name": "generateethkeys",
"version": "1.0.0",
"description": "",
"main": "generateEthKeys.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"bin": {
"generateethkeys": "./generateEthKeys.js"
},
"dependencies": {
"commander": "^12.1.0"
}
}
运行npm link
希望全局安装这个CLI工具并在任何地方使用它,可以使用以下命令在本地测试:
npm link
发布到npm
npm publish
这一步操作操作即发布成功了,如下图
当然,这一步是需要确保我们已经注册并登录了npm,如果没有登录,就会出现下图问题,说明需要先登录,可以继续参考下面的操作
登录npm
npm adduser
执行完这一步命令后,会提示你依次输入Username、Password、Email和一次性登录密码
通过命令安装CLI工具
其他用户可以通过以下命令安装我们的CLI工具
npm install -g generateEthKeys
至此,艺术已成
登录npm查看
书籍推荐
《Ubuntu Linux运维从零开始学》详解Ubuntu安装、文件系统基础、文件和目录管理、用户和权限管理、系统启动和关闭、服务和进程管理、软件包管理、磁盘和文件系统管理、文本编辑器、网络管理、系统和网络安全、文件服务器Samba、FTP文件传输服务、NFS网络文件服务、NTP服务的搭建与应用、DNS域名服务、DHCP动态主机配置协议、Nginx服务搭建、Tomcat服务搭建与应用、LAMP搭建、Jenkins服务搭建与应用、Zabbix监控系统搭建与应用、Ansible配置与应用。
书籍名称:《Ubuntu Linux运维从零开始学》
内容介绍
Ubuntu Linux是目前最流行的Linux操作系统之一。Ubuntu的目标在于为一般用户提供一个最新的、相当稳定的、主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。《Ubuntu Linux运维从零开始学》详解Ubuntu Server 22.04运维基础和常用工具,配套PPT课件和作者QQ群答疑服务。
全书共分24章,内容包括了解Linux、安装Ubuntu、文件系统基础知识、文件和目录管理、用户和权限管理、系统启动和关闭、服务和进程管理、软件包管理、磁盘和文件系统管理、文本编辑器、网络管理、系统和网络安全、Samba文件服务器、FTP文件传输服务、NFS网络文件服务、NTP服务搭建与应用、DNS域名服务、DHCP动态主机配置协议、Nginx服务的搭建、Tomcat服务搭建与应用、LAMP的搭建、Jenkins服务搭建与应用、Zabbix监控系统搭建与应用、Ansible配置与应用。
适合人群
- 适合Ubuntu Linux初学者、Ubuntu运维人员、Ubuntu应用开发人员。
- 本书也适合作为高等院校或高职高专Linux课程的教材。
如何领书
————————————————
⚠️:三种送书方式可以重复叠加获奖🏆
方式一 博客送书
本篇文章送书 🔥1本 评论区抽1位小伙伴送书
📆 活动时间:截止到 2024-07-22 18:00:00
🎁 抽奖方式:利用网络公开的在线抽奖工具进行抽奖
💡 参与方式:关注、点赞、收藏 + 任意大于10个字的评论
方式二 公众号送书
关注公众号,参与抽奖,中奖即可送书 🔥2本
📆 活动时间:达到100 人参与时自动开奖,2024-07-22 18:00:00 截止
🎁 抽奖方式:利用抽奖小程序进行抽奖
💡 参与方式:关注微信公众号《鲲志说》,发送:我要学Ubuntu ,即可参与
或微信扫描下方图片
方式三 粉丝群送书
具体参与方式可➕kunzhi96或扫描下方二维码,体验更多白嫖书籍的玩法
自主购买
小伙伴也可以访问链接进行自主购买哦~
直达京东购买链接🔗:《Ubuntu Linux运维从零开始学》
最后
- 好看的灵魂千篇一律,有趣的鲲志一百六七!
- 如果觉得文章还不错的话,可以点赞+收藏+关注 支持一下,鲲志的主页 还有很多有趣的文章,欢迎小伙伴们前去点评
- 如果有什么需要改进的地方还请大佬指出❌
- 欢迎学习交流|商务合作|共同进步!
- ❤️ kunzhi96 公众号【鲲志说】