分类: 编码

  • Windows快速创建 Hyper-V 虚拟机的 PowerShell 脚本

    在 Windows 系统上使用 Hyper-V 虚拟化技术时,手动创建虚拟机可能会比较繁琐。可以通过 PowerShell 脚本来自动化这一过程,大大提高效率。今天我将分享一个简单的 PowerShell 脚本,用于快速创建一个 Debian 12 虚拟机,并配置相关的硬件资源和集成服务。

    我编写的 PowerShell 脚本能够自动化以下任务:

    • 创建一台 Debian 12 虚拟机。
    • 分配内存、CPU 核心、虚拟硬盘。
    • 配置网络适配器。
    • 启动虚拟机并设置增强会话模式。

    保存为hyperv-create.ps1

    #Requires -RunAsAdministrator
    #Requires -Modules Hyper-V
    
    $Name = "Debian12-hyperv"
    $Description = "
    Username: test
    Password: test
    (US keyboard layout)"
    
    # Create the virtual machine
    New-VM `
      -Generation 2 `
      -Name "$Name" `
      -MemoryStartupBytes 4096MB `
      -SwitchName "Default Switch" `
      -VHDPath ".\Debian12-hyperv.vhdx"
    
    # Set virtual machine notes
    Set-VM -Name "$Name" -Notes "$Description"
    
    # Enable enhanced session transport
    Set-VM -Name "$Name" -EnhancedSessionTransportType HVSocket
    
    # Disable secure boot
    Set-VMFirmware -VMName "$Name" -EnableSecureBoot Off
    
    # Set CPU cores
    Set-VMProcessor -VMName "$Name" -Count 2
    
    # Enable integration services
    Enable-VMIntegrationService -VMName "$Name" -Name "Guest Service Interface"
    
    # Start the virtual machine
    Start-VM -Name $Name
    
    Write-Host "Virtual machine $Name created and started successfully."
  • Vim配置优化提升编辑体验

    Vim 是一个非常强大的文本编辑器,凭借其灵活的配置和强大的插件系统,能够适应各种需求。通过一些简单的配置,您可以显著提升 Vim 的使用体验。以下是一些常见且实用的配置,帮助您让 Vim 更加高效和便捷。

    1. 设置文件编码为 UTF-8
      让 Vim 支持多种字符,避免乱码。
    set encoding=utf-8
    1. 设置终端编码为 UTF-8
      确保终端和 Vim 的字符编码一致,避免乱码。
    set termencoding=utf-8
    1. 显示行号
      在编辑代码时,显示行号方便定位。
    set number
    1. 开启语法高亮
      让代码更易读,通过颜色区分不同的语法元素。
    syntax on
    1. 显示光标位置
      在底部显示光标的行列位置,方便查看。
    set ruler
  • 使用 OpenSSL 在 Windows11上进行文件加密与解密

    数据安全已经成为了我们日常工作和生活中的重要课题。特别是对于包含敏感信息的文件,确保其在存储或传输过程中的安全性是至关重要的。加密是最常用的保护数据的方法之一。使用 OpenSSL 工具,通过一个简单的批处理脚本,基于密码进行文件的加密与解密操作。

    1. OpenSSL 简介

    OpenSSL 是一个强大的开源工具,提供了多种加密算法和功能,广泛应用于数据加密、SSL/TLS 协议等领域。它支持对文件和信息进行加密、解密以及生成密钥对等操作。

    2. 脚本功能概述

    批处理脚本可以通过 OpenSSL 命令行工具实现对文件的加密和解密,使用密码作为加密和解密的唯一凭证。以下是脚本的基本功能:

    • 加密:通过用户输入的密码,将指定的文件加密,并生成一个 .enc 后缀的加密文件。
    • 解密:通过用户输入的密码,解密 .enc 文件并恢复成原始文件。

    3. 脚本实现原理

    我们编写的批处理脚本使用 OpenSSL 命令行工具提供的加密功能,支持 AES-256-CBC 加密算法,同时通过 -salt-pbkdf2 参数增强加密的安全性。脚本根据文件的后缀名判断是进行加密操作还是解密操作,并且要求用户输入密码。

    4. 脚本代码

    以下是实现文件加密与解密的批处理脚本代码。该脚本能够根据文件后缀判断文件是需要加密还是解密,且加密和解密过程中都依赖用户输入的密码。

    保存为encrypt_decrypt.bat

    @echo off
    chcp 65001 >nul
    setlocal enabledelayedexpansion
    
    :: 检查 OpenSSL 是否可用
    where openssl >nul 2>nul
    if %errorlevel% neq 0 (
        echo OpenSSL 未安装或未加入环境变量,请检查。
        pause
        exit /b
    )
    
    :: 配置加密方式
    set "CIPHER=-aes-256-cbc -salt -pbkdf2"
    
    :: 检查是否传入文件名参数
    if "%~1"=="" (
        echo 错误: 请传入需要加密或解密的文件名。
        echo 示例: encrypt_decrypt.bat file.txt
        pause
        exit /b
    )
    
    set "input_file=%~1"
    set "file_ext=%~x1"
    set "output_file="
    
    :: 判断是加密还是解密
    if "%file_ext%"==".enc" (
        set "output_file=%input_file:.enc=%"
        echo 正在解密文件: !input_file!
        echo 请输入密码进行解密:
        set /p password=
        openssl enc %CIPHER% -d -in "!input_file!" -out "!output_file!" -pass pass:!password!
        echo 解密完成,输出文件: !output_file!
    ) else (
        set "output_file=!input_file!.enc"
        echo 正在加密文件: !input_file!
        echo 请输入密码进行加密:
        set /p password=
        openssl enc %CIPHER% -in "!input_file!" -out "!output_file!" -pass pass:!password!
        echo 加密完成,输出文件: !output_file!
    )
    
    echo 操作完成,按任意键退出...
    pause
    
    endlocal

    5. 脚本使用说明

    5.1 环境准备

    首先,确保你的系统上已经安装了 OpenSSL。你可以在命令行中运行以下命令来验证 OpenSSL 是否安装:

    where openssl

    如果返回 OpenSSL 的安装路径,说明已正确安装。如果没有安装,可以前往 OpenSSL 官网下载安装。

    5.2 使用方法

    加密文件
    将需要加密的文件拖放到 encrypt_decrypt.bat 脚本上,或者在命令行中运行以下命令:

    encrypt_decrypt.bat file.txt

    脚本会提示你输入密码,输入密码后,文件将被加密,并生成 .enc 后缀的加密文件。

    解密文件
    对于已经加密的文件(例如 file.txt.enc),你可以使用以下命令进行解密:

    encrypt_decrypt.bat file.txt.enc

    脚本会提示你输入密码,输入正确的密码后,文件将被解密为原始文件。

    5.3 注意事项

    • 密码的安全性:密码是加密和解密过程中的唯一凭证。请确保密码足够强大,并避免泄露。
    • 文件备份:在进行加密或解密操作前,建议备份文件,防止操作失误导致文件丢失。

    使用 OpenSSL 工具和批处理脚本,你可以轻松地对文件进行加密和解密,保障文件在存储或传输过程中的安全性。通过密码加密文件是一种简单且有效的保护文件的方式,适合大多数日常使用场景。

  • 使用 OpenSSL 在 macOS 上进行文件加密与解密

    在数字化时代,保护个人和企业的数据安全至关重要。特别是对于包含敏感信息的文件,确保其在存储或传输过程中的安全性是非常必要的。加密是一种有效的保护手段,它确保了未经授权的人员无法访问加密文件的内容。使用 OpenSSL 工具,并通过一个简单的 shell 脚本,在 macOS 上实现文件的加密与解密操作。

    1. OpenSSL 简介

    OpenSSL 是一个开源的工具库,它提供了强大的加密算法,广泛应用于数据加密、SSL/TLS 加密协议等领域。它支持对文件进行加密、解密,并且提供了生成密钥、证书等功能。在 macOS 上,OpenSSL 通常是预装的,因此我们可以直接在终端使用它来加密和解密文件。

    2. 脚本功能概述

    通过使用 OpenSSL 工具和一个简单的 shell 脚本,我们可以在 macOS 系统上实现文件的加密与解密。该脚本具有以下功能:

    • 加密文件:用户通过输入密码将指定的文件加密,生成 .enc 后缀的加密文件。
    • 解密文件:用户输入密码,解密 .enc 后缀的加密文件,恢复成原始文件。

    3. 脚本实现原理

    该 shell 脚本使用 OpenSSL 的 enc 命令,通过 AES-256-CBC 加密算法对文件进行加密。为了增强安全性,脚本还使用了盐值(-salt)和 PBKDF2 密码派生函数(-pbkdf2)。脚本通过文件的扩展名来判断文件是需要加密还是解密,用户只需输入密码即可完成加密或解密操作。

    4. 脚本代码

    以下是实现文件加密与解密的 macOS 版本 shell 脚本。它支持加密和解密操作,用户只需输入密码即可完成文件的加密或解密。

    保存为encrypt_decrypt.sh

    #!/bin/bash
    
    # 配置加密方式
    CIPHER="-aes-256-cbc -salt -pbkdf2"
    
    # 检查是否传入文件名参数
    if [ -z "$1" ]; then
        echo "错误: 请传入需要加密或解密的文件名。"
        echo "示例: ./encrypt_decrypt.sh file.txt"
        exit 1
    fi
    
    input_file="$1"
    file_ext="${input_file##*.}"
    output_file=""
    
    # 判断是加密还是解密
    if [ "$file_ext" == "enc" ]; then
        output_file="${input_file%.enc}"
        echo "正在解密文件: $input_file"
        echo "请输入密码进行解密:"
        read -s password
        openssl enc $CIPHER -d -in "$input_file" -out "$output_file" -pass pass:"$password"
        if [ $? -eq 0 ]; then
            echo "解密完成,输出文件: $output_file"
        else
            echo "解密失败,请检查密码。"
        fi
    else
        output_file="${input_file}.enc"
        echo "正在加密文件: $input_file"
        echo "请输入密码进行加密:"
        read -s password
        openssl enc $CIPHER -in "$input_file" -out "$output_file" -pass pass:"$password"
        if [ $? -eq 0 ]; then
            echo "加密完成,输出文件: $output_file"
        else
            echo "加密失败,请检查密码。"
        fi
    fi
    
    echo "操作完成。"

    5. 如何使用此脚本

    5.1 环境准备

    首先,确保你已经安装了 OpenSSL。macOS 通常自带了 OpenSSL,您可以通过以下命令验证是否已安装:

    openssl version

    5.2 使用方法

    设置文件权限:

    chmod +x encrypt_decrypt.sh

    加密文件
    将需要加密的文件传入脚本。例如,如果要加密 file.txt 文件,可以在终端运行以下命令:

    ./encrypt_decrypt.sh file.txt

    脚本会提示你输入密码,输入密码后,文件将被加密,输出 .enc 后缀的加密文件。

    解密文件
    如果你有一个加密过的 .enc 文件,使用以下命令进行解密:

    ./encrypt_decrypt.sh file.txt.enc

    脚本会提示你输入密码,输入正确的密码后,文件将被解密为原始文件。

    5.3 注意事项

    • 密码的安全性:密码是加密和解密的关键,请确保密码足够强大并妥善保管。避免使用简单的密码,以减少文件被破解的风险。
    • 文件备份:在进行加密或解密操作之前,建议先备份原始文件,以防止由于操作失误导致文件丢失。

    通过使用 OpenSSL 工具和本教程提供的 shell 脚本,您可以轻松地在 macOS 上实现文件的加密与解密。无论是保护个人文件,还是传输敏感数据,密码加密都是一种简单而有效的保护方式。

  • WordPress 博客的 Markdown 写作

    基本文本格式

    • 标题: 使用 # 符号表示不同级别的标题。
    # 一级标题
    ## 二级标题
    ### 三级标题
    • 粗体: 使用两个星号 ** 或两个下划线 __ 包裹文本。
    **这是粗体文本**
    __这也是粗体文本__
    • 斜体: 使用一个星号 * 或一个下划线 _ 包裹文本。
    *这是斜体文本*
    _这也是斜体文本_
    • 粗斜体: 使用三个星号 *** 或三个下划线 ___ 包裹文本。
    ***这是粗斜体文本***
    ___这也是粗斜体文本___
    • 删除线: 使用两个波浪线 ~~ 包裹文本。
    ~~这是删除线文本~~

    列表

    • 无序列表: 使用星号 *、加号 + 或减号 - 作为列表项的标记。
    * 项目一
    * 项目二
    + 另一个项目
    - 还有一个项目
    • 有序列表: 使用数字后跟一个英文句点 . 作为列表项的标记。
    1. 第一项
    2. 第二项
    3. 第三项

    链接

    • 行内链接: 将链接文本放在方括号 [] 中,链接地址放在紧随其后的圆括号 () 中。
    [链接文本](https://www.example.com)
    • 引用链接: 先在文本中定义链接标签,然后在文档的其他地方定义链接地址。
    这是带有[引用链接][ref1]的文本。
    
    [ref1]: https://www.example.com "可选的链接标题"

    图片

    • 图片语法与链接类似,只是在方括号 [] 前面加一个感叹号 !
    ![图片替代文本](https://www.example.com/image.jpg "可选的图片标题")

    引用

    • 使用大于号 > 符号放在每行引用的开头。
    > 这是一段引用文字。
    > 可以有多行。

    代码块

    • 行内代码: 使用反引号 ` 包裹代码。
    这是一个 `inline code` 示例。
    • 块级代码: 使用三个反引号 包裹代码块,可以在第一个 后面指定语言,实现语法高亮(某些 WordPress 插件或主题可能支持)。
    ```python
    def hello():
    print("Hello, world!")
    ```

    JavaScript

    console.log("Hello, world!");

    分隔线

    • 可以使用三个或更多的星号 ***、减号 --- 或下划线 ___ 来创建分隔线。
    ***
    ---
    ___

    在 WordPress 中使用 Markdown

    1. 撰写文章:
    • 使用 Markdown 区块 (Gutenberg): 在区块编辑器中添加一个 “Markdown” 区块,然后在该区块中直接输入 Markdown 语法。
    1. 预览和发布: WordPress 会在预览或发布时将你的 Markdown 转换为 HTML 进行显示。

    一个简单的 WordPress 文章示例

    # 我的第一篇 Markdown WordPress 文章
    
    欢迎来到我的博客!这篇文章将演示如何使用简单的 Markdown 语法在 WordPress 中撰写内容。
    
    ## 这是一个二级标题
    
    在这里,我可以写一些关于这个主题的更多细节。
    
    **这是加粗的文字**,而 *这是倾斜的文字*。你也可以使用 ***粗斜体***。
    
    这是一个无序列表:
    
    * 第一项
    * 第二项
    * 第三项
    
    这是一个有序列表:
    
    1.  步骤一
    2.  步骤二
    3.  步骤三
    
    这是一个链接到 [我的网站](https://www.google.com/search?q=https://www.yourwebsite.com)。
    
    > 这是一段引用。
    
    这是一个行内代码示例:`print("Hello")`。
    
    这是一个代码块:
    
    ```python
    def greet(name):
    print(f"Hello, {name}!")
    
    greet("World")
    ```
  • 在 WordPress 中集成 Cloudflare Turnstile

    在 WordPress 评论中集成 Cloudflare Turnstile
    将密钥存储在 wp-config.php 中,并将验证代码放在 functions.php 中。

    更新内容:
    2025-03-26 第一版发布
    2025-03-30 修复了一些错误,Cloudflare Turnstile 验证将只在 WordPress 前台未登录的用户提交评论时才会出现和进行验证,从而提供更好的用户体验。

    1. wp-config.php 文件

    • 打开你的 WordPress 网站根目录下的 wp-config.php 文件。
    • wp-config.php 文件中,添加以下代码,替换 你的SiteKey你的SecretKey
    // Cloudflare Turnstile
    define('CLOUDFLARE_TURNSTILE_SITE_KEY', '你的SiteKey');
    define('CLOUDFLARE_TURNSTILE_SECRET_KEY', '你的SecretKey');

    2. functions.php 文件

    • 打开你的主题的 functions.php 文件。
    • 将以下代码添加到 functions.php 文件中:
    // Cloudflare Turnstile
    // 向评论表单添加 Turnstile JavaScript
    function add_cloudflare_turnstile_to_comment_form() {
        if (!is_admin() && !is_user_logged_in() && defined('CLOUDFLARE_TURNSTILE_SITE_KEY')) {
            echo '<div class="cf-turnstile" data-sitekey="' . esc_attr(CLOUDFLARE_TURNSTILE_SITE_KEY) . '"></div>';
            echo '<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>';
        }
    }
    add_action('comment_form_after_fields', 'add_cloudflare_turnstile_to_comment_form');
    
    // 验证 Turnstile 响应
    function verify_cloudflare_turnstile($commentdata) {
        // 在后台或已登录用户不进行验证
        if (is_admin() || is_user_logged_in()) {
            return $commentdata;
        }
    
        if (isset($_POST['cf-turnstile-response']) && defined('CLOUDFLARE_TURNSTILE_SECRET_KEY')) {
            $secret = CLOUDFLARE_TURNSTILE_SECRET_KEY;
            $response = sanitize_text_field($_POST['cf-turnstile-response']);
            $remoteip = $_SERVER['REMOTE_ADDR'];
    
            $url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify';
            $data = array(
                'secret' => $secret,
                'response' => $response,
                'remoteip' => $remoteip
            );
    
            $options = array(
                'http' => array(
                    'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                    'method'  => 'POST',
                    'content' => http_build_query($data)
                )
            );
            $context  = stream_context_create($options);
            $result = file_get_contents($url, false, $context);
            $json_result = json_decode($result);
    
            if ($json_result === null || !isset($json_result->success) || $json_result->success !== true) {
                wp_die(__('Turnstile verification failed, please try again.', 'your-text-domain'));
            }
        } else {
            wp_die(__('Turnstile was not submitted, please try again.', 'your-text-domain'));
        }
        return $commentdata;
    }
    add_filter('preprocess_comment', 'verify_cloudflare_turnstile');

    重要说明:

    • 替换密钥: 请务必将 "你的SiteKey""你的SecretKey" 替换为你在 Cloudflare Turnstile 中获得的实际密钥。
    • 备份: 在编辑 wp-config.phpfunctions.php 文件之前,请务必备份你的网站。
    • 测试: 在实际部署之前,请彻底测试 Turnstile 是否正常工作。
    • 主题更新: 如果你更新了主题,请确保将 functions.php 中的代码重新添加。
    • 安全: 妥善保管你的 Secret key.
    • 错误处理: 现在的错误处理是使用 wp_die()函数,用来显示错误。 你可以根据自己的需要,修改错误提示的内容。