欢迎来到我的博客

这里会分享一些技术知识、生活感悟和阅读心得。

使用 Node.js 生成 Token

发布时间:2025 年 3 月 1 日

在 Web 开发中,Token 是一种常见的身份验证方式。下面是一个使用 Node.js 和 `jsonwebtoken` 库生成 Token 的示例代码:

                        
const jwt = require('jsonwebtoken');

// 密钥
const secretKey = 'your_secret_key';

// 用户信息
const user = {
    id: 1,
    username: 'example_user'
};

// 生成 Token
const token = jwt.sign(user, secretKey, { expiresIn: '1h' });

console.log('生成的 Token:', token);
                        
                    

在上述代码中,我们使用 `jsonwebtoken` 库的 `sign` 方法生成了一个有效期为 1 小时的 Token。

国密算法 SM2 简单示例

发布时间:2025 年 3 月 2 日

国密算法 SM2 是一种椭圆曲线公钥密码算法,下面是一个使用 `gm-crypto` 库进行 SM2 加密和解密的简单示例:

                        
const sm2 = require('gm-crypto').sm2;

// 生成密钥对
const keypair = sm2.generateKeyPairHex();
const publicKey = keypair.publicKey;
const privateKey = keypair.privateKey;

// 待加密的明文
const plaintext = 'Hello, SM2!';

// 加密
const ciphertext = sm2.doEncrypt(plaintext, publicKey, 1);

// 解密
const decryptedText = sm2.doDecrypt(ciphertext, privateKey, 1);

console.log('加密后的密文:', ciphertext);
console.log('解密后的明文:', decryptedText);
                        
                    

上述代码展示了如何使用 `gm-crypto` 库生成 SM2 密钥对,并进行加密和解密操作。

对称加密算法 AES 示例

发布时间:2025 年 3 月 3 日

AES 是一种常用的对称加密算法,下面是一个使用 Node.js 的 `crypto` 模块进行 AES 加密和解密的示例:

                        
const crypto = require('crypto');

// 密钥和初始化向量
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);

// 待加密的明文
const plaintext = 'Hello, AES!';

// 创建加密器
const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);

// 加密
let encrypted = cipher.update(plaintext, 'utf8', 'hex');
encrypted += cipher.final('hex');

// 创建解密器
const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);

// 解密
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');

console.log('加密后的密文:', encrypted);
console.log('解密后的明文:', decrypted);
                        
                    

此代码使用 AES-256-CBC 模式对明文进行加密和解密操作。

Docker 基础使用:运行一个简单的 Nginx 容器

发布时间:2025 年 3 月 4 日

Docker 是一种容器化技术,能够帮助我们快速部署应用。以下是使用 Docker 运行一个简单的 Nginx 容器的示例:

                        
# 拉取 Nginx 镜像
docker pull nginx

# 运行 Nginx 容器
docker run -d -p 8080:80 nginx
                        
                    

上述代码中,首先使用 `docker pull` 命令拉取 Nginx 镜像,然后使用 `docker run` 命令在后台运行一个 Nginx 容器,并将容器的 80 端口映射到主机的 8080 端口。

Vue 组件化开发:创建一个简单的计数器组件

发布时间:2025 年 3 月 5 日

Vue 的组件化开发可以提高代码的可维护性和复用性。以下是一个简单的计数器组件示例:

                        
<template>
  <div>
    <button @click="decrement">-</button>
    <span>{{ count }}</span>
    <button @click="increment">+</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 0
    };
  },
  methods: {
    increment() {
      this.count++;
    },
    decrement() {
      this.count--;
    }
  }
};
</script>
                        
                    

在这个组件中,我们定义了一个 `count` 数据属性,并提供了 `increment` 和 `decrement` 方法来增加和减少计数器的值。

C# 委托和事件:实现一个简单的事件通知系统

发布时间:2025 年 3 月 6 日

在 C# 中,委托和事件是实现事件驱动编程的重要机制。以下是一个简单的事件通知系统示例:

                        
using System;

// 定义委托
public delegate void NotificationEventHandler(string message);

// 发布者类
public class Publisher
{
    public event NotificationEventHandler Notification;

    public void SendNotification(string message)
    {
        Notification?.Invoke(message);
    }
}

// 订阅者类
public class Subscriber
{
    public void ReceiveNotification(string message)
    {
        Console.WriteLine($"Received notification: {message}");
    }
}

class Program
{
    static void Main()
    {
        Publisher publisher = new Publisher();
        Subscriber subscriber = new Subscriber();

        // 订阅事件
        publisher.Notification += subscriber.ReceiveNotification;

        // 发布通知
        publisher.SendNotification("Hello, World!");
    }
}
                        
                    

在这个示例中,我们定义了一个委托 `NotificationEventHandler`,并在 `Publisher` 类中声明了一个事件 `Notification`。`Subscriber` 类订阅了这个事件,并在事件触发时接收通知。

Python 数据分析基础:使用 Pandas 读取和处理 CSV 文件

发布时间:2025 年 3 月 7 日

Pandas 是 Python 中用于数据分析的强大库。以下是使用 Pandas 读取和处理 CSV 文件的示例:

                        
import pandas as pd

# 读取 CSV 文件
data = pd.read_csv('data.csv')

# 查看数据基本信息
print(data.info())

# 查看数据集行数和列数
rows, columns = data.shape

if rows > 0:
    # 查看数据前几行
    print(data.head().to_csv(sep='\t', na_rep='nan'))
else:
    print('数据为空')
                        
                    

在这个示例中,我们使用 `pandas` 的 `read_csv` 函数读取一个 CSV 文件,并使用 `info` 方法查看数据的基本信息,使用 `head` 方法查看数据的前几行。

Python 爬虫入门:使用 Requests 和 BeautifulSoup 抓取网页数据

发布时间:2025 年 3 月 8 日

Python 可以很方便地实现网页数据的抓取。以下是一个简单的爬虫示例,使用 `requests` 库发送 HTTP 请求,使用 `BeautifulSoup` 库解析 HTML 内容:

                        
import requests
from bs4 import BeautifulSoup

# 发送 HTTP 请求
url = 'https://example.com'
response = requests.get(url)

# 解析 HTML 内容
soup = BeautifulSoup(response.text, 'html.parser')

# 查找所有的链接
links = soup.find_all('a')
for link in links:
    print(link.get('href'))
                        
                    

在这个示例中,我们首先使用 `requests` 库发送一个 GET 请求获取网页内容,然后使用 `BeautifulSoup` 库将 HTML 内容解析为可操作的对象,最后查找所有的链接并打印出来。

生活随笔

生活中总有一些美好的瞬间值得记录,比如和朋友的一次聚会,一次难忘的旅行。

手工制作:纸艺花朵

发布时间:2025 年 3 月 4 日

最近尝试了用纸制作花朵,过程很有趣。首先准备好彩色纸张、剪刀、胶水和细铁丝。将纸张剪成花瓣形状,然后用胶水将花瓣一片片粘贴起来,最后将铁丝插入花芯固定。这样一朵漂亮的纸艺花朵就完成啦,摆在桌上非常美观。

手工编织:手链

发布时间:2025 年 3 月 5 日

周末闲来无事,尝试了手工编织手链。买了一些彩色的丝线和珠子,按照教程一步步编织。虽然一开始有些生疏,但慢慢就熟练起来了。最后编织出的手链很有成就感,还可以送给朋友当作礼物。

陶艺制作:小杯子

发布时间:2025 年 3 月 6 日

去陶艺工作室体验了一把陶艺制作,做了一个小杯子。揉泥、塑形、刻画,每一个步骤都充满了乐趣。看着自己亲手制作的杯子从一团泥土变成一个有模有样的杯子,真的很有满足感。等烧制完成后,就可以用它来喝茶啦。

阅读推荐

以下是我近期阅读的一些好书推荐:

  • 《代码大全》 - 经典的编程书籍,涵盖了软件开发的各个方面。
  • 《人类简史:从动物到上帝》 - 以全新的视角讲述人类的历史。

关于我

我是一名热爱编程和分享的开发者,希望通过这个博客记录自己的学习和成长。