吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2349|回复: 12
收起左侧

[其他原创] FlashSwirl 闪旋,对称加密算法库,支持流加密、AEAD加密、HASH、HMAC、HKDF、PBKDF2

  [复制链接]
风之暇想 发表于 2026-4-25 20:53

appicon.png
FlashSwirl 闪旋,一款高性能的对称加密算法库,提供流加密、AEAD认证加密、HAS
H、HMAC、HKDF、PBKDF2


概述

风之暇想研究的对称加密算法,基于ARX(Add-Rotate-XOR)结构设计,灵感来源于ChaCha20;加密库提供流加密、AEAD认证加密、HASH、HMAC、HKDF密钥派生、PBKDF2密钥派生的密码学功能。

✨ 特性

  • 多种加密模式:支持流加密(Stream)和AEAD认证加密
  • 高性能设计:批量处理、并行计算、内存池优化
  • 跨平台支持:提供C++、Go、JavaScript三种语言代码

算法规范

算法规范文档


三种语言库调用说明

C++ 版本

使用示例:

#include "FlashSwirl.h"
#include <iostream>
#include <vector>

int main() {
    // 准备密钥和Nonce
    uint8_t key[32] = { /* 32字节密钥 */ };
    uint8_t nonce[24] = { /* 24字节随机Nonce,必须使用安全随机数生成 */ };

    // ===== 1. 流加密 =====
    std::vector<uint8_t> data = {'H', 'e', 'l', 'l', 'o'};
    FlashSwirl_EncryptBuffer(key, 32, nonce, 24, data.data(), data.size(), 20);
    // data现在包含密文

    FlashSwirl_DecryptBuffer(key, 32, nonce, 24, data.data(), data.size(), 20);
    // data现在恢复为明文

    // ===== 2. AEAD认证加密 =====
    uint8_t plaintext[] = "Secret message";
    uint8_t ciphertext[256];
    int outLen = sizeof(ciphertext);
    uint8_t ad[] = "additional-data";

    FlashSwirl_EncryptAEADBuffer(key, 32, nonce, 24, 
                                  plaintext, sizeof(plaintext)-1,
                                  ciphertext, &outLen, ad, sizeof(ad)-1, 20);

    uint8_t decrypted[256];
    int plainLen = sizeof(decrypted);
    FlashSwirl_DecryptAEADBuffer(key, 32, nonce, 24,
                                  ciphertext, outLen,
                                  decrypted, &plainLen, ad, sizeof(ad)-1, 20);

    // ===== 3. HASH =====
    const char* message = "Hello, FlashSwirl!";
    uint8_t hash[32];
    FlashSwirl_Hash((const uint8_t*)message, strlen(message), 20, hash);

    // ===== 4. HMAC =====
    uint8_t hmacKey[] = "secret-key";
    uint8_t hmacOut[32];
    FlashSwirl_HMAC(hmacKey, sizeof(hmacKey)-1, 
                    (const uint8_t*)message, strlen(message), 
                    20, hmacOut);

    // ===== 5. HKDF密钥派生 =====
    uint8_t masterKey[32] = { /* 主密钥 */ };
    uint8_t salt[32] = { /* 盐值 */ };
    uint8_t info[] = "my-app";
    uint8_t derivedKey[32];
    FlashSwirl_HKDF(masterKey, 32, salt, 32, info, sizeof(info)-1, 32, 20, derivedKey);

    // ===== 6. PBKDF2密钥派生 =====
    const char* password = "user-password";
    uint8_t pbkdf2Salt[] = "random-salt";
    uint8_t keyFromPassword[32];
    FlashSwirl_PBKDF2((const uint8_t*)password, strlen(password),
                      pbkdf2Salt, sizeof(pbkdf2Salt)-1,
                      10000, 32, 20, keyFromPassword);

    return 0;
}

Go 版本

https://pkg.go.dev/github.com/fzxx/FlashSwirl/GO/FlashSwirl

使用示例:

package main

import (
    "bytes"
    "crypto/rand"
    "fmt"

    "FlashSwirl"
)

func main() {
    // 准备密钥和Nonce
    key := make([]byte, 32)
    nonce := make([]byte, 24)
    rand.Read(key)
    rand.Read(nonce)

    // ===== 1. 流加密 =====
    plaintext := []byte("Secret message")
    var encrypted bytes.Buffer
    FlashSwirl.Encrypt(key, nonce, bytes.NewReader(plaintext), &encrypted, 20)

    var decrypted bytes.Buffer
    FlashSwirl.Decrypt(key, nonce, &encrypted, &decrypted, 20)
    fmt.Printf("Decrypted: %s\n", decrypted.Bytes())

    // ===== 2. AEAD认证加密 =====
    var aeadEncrypted bytes.Buffer
    additionalData := []byte("context info")
    FlashSwirl.EncryptAEAD(key, nonce, bytes.NewReader(plaintext), &aeadEncrypted, additionalData, 20)

    var aeadDecrypted bytes.Buffer
    valid, _ := FlashSwirl.DecryptAEAD(key, nonce, &aeadEncrypted, &aeadDecrypted, additionalData, 20)
    if valid {
        fmt.Printf("AEAD Decrypted: %s\n", aeadDecrypted.Bytes())
    }

    // ===== 3. HASH =====
    message := []byte("Hello, FlashSwirl!")
    hash, _ := FlashSwirl.Hash(bytes.NewReader(message), 20)
    fmt.Printf("Hash: %x\n", hash)

    // ===== 4. HMAC =====
    hmacKey := []byte("secret-key")
    hmacResult, _ := FlashSwirl.HMAC(hmacKey, bytes.NewReader(message), 20)
    fmt.Printf("HMAC: %x\n", hmacResult)

    // ===== 5. HKDF密钥派生 =====
    salt := []byte("random-salt")
    info := []byte("my-app")
    derivedKey, _ := FlashSwirl.HKDF(key, salt, info, 32, 20)
    fmt.Printf("Derived Key: %x\n", derivedKey)

    // ===== 6. PBKDF2密钥派生 =====
    password := []byte("user-password")
    pbkdf2Salt := []byte("random-salt")
    keyFromPassword, _ := FlashSwirl.PBKDF2(password, pbkdf2Salt, 10000, 32, 20)
    fmt.Printf("Key from password: %x\n", keyFromPassword)
}

JavaScript 版本

https://flashswirl.pages.dev/

CDN引用

<script src="https://cdn.jsdelivr.net/gh/fzxx/FlashSwirl/JS/FlashSwirl.js"></script>
<script src="https://cdn.statically.io/gh/fzxx/FlashSwirl@main/JS/FlashSwirl.js"></script>

使用示例:

// 浏览器环境
// <script src="FlashSwirl.js"></script>

// Node.js环境
// const FlashSwirl = require('./FlashSwirl.js');

// 准备密钥和Nonce
const key = crypto.getRandomValues(new Uint8Array(32));
const nonce = crypto.getRandomValues(new Uint8Array(24));

// ===== 1. 流加密 =====
const plaintext = new TextEncoder().encode("Secret message");
const ciphertext = FlashSwirl.encrypt('stream', key, nonce, plaintext, new Uint8Array(0), 20);
const decrypted = FlashSwirl.decrypt('stream', key, nonce, ciphertext, new Uint8Array(0), 20);
console.log("Decrypted:", new TextDecoder().decode(decrypted));

// ===== 2. AEAD认证加密 =====
const additionalData = new TextEncoder().encode("context info");
const aeadCiphertext = FlashSwirl.encrypt('aead', key, nonce, plaintext, additionalData, 20);
const aeadDecrypted = FlashSwirl.decrypt('aead', key, nonce, aeadCiphertext, additionalData, 20);
console.log("AEAD Decrypted:", new TextDecoder().decode(aeadDecrypted));

// ===== 3. HASH =====
const message = new TextEncoder().encode("Hello, FlashSwirl!");
const hash = FlashSwirl.hash(message, 20);
console.log("Hash:", Array.from(hash).map(b => b.toString(16).padStart(2, '0')).join(''));

// ===== 4. HMAC =====
const hmacKey = new TextEncoder().encode("secret-key");
const hmacResult = FlashSwirl.hmac(hmacKey, message, 20);
console.log("HMAC:", Array.from(hmacResult).map(b => b.toString(16).padStart(2, '0')).join(''));

// ===== 5. HKDF密钥派生 =====
const salt = new TextEncoder().encode("random-salt");
const info = new TextEncoder().encode("my-app");
const derivedKey = FlashSwirl.hkdf(key, salt, info, 32, 20);
console.log("Derived Key:", Array.from(derivedKey).map(b => b.toString(16).padStart(2, '0')).join(''));

// ===== 6. PBKDF2密钥派生 =====
const password = new TextEncoder().encode("user-password");
const pbkdf2Salt = new TextEncoder().encode("random-salt");
const keyFromPassword = FlashSwirl.pbkdf2(password, pbkdf2Salt, 10000, 32, 20);
console.log("Key from password:", Array.from(keyFromPassword).map(b => b.toString(16).padStart(2, '0')).join(''));

开源地址

https://github.com/fzxx/FlashSwirl

最后

看看有没有人能破解出明文、密钥或者篡改认证标签🎭

8轮流密码

Nonce

ea1d81b7f34491c2098d22d84c5775d96d7d22cf24d1474c

密文

7ab31ed650d880971841acf2ac575b1f3233e78ce37168f8167524e15fc4c21ab307120dd3c6f92b48e1c1b9e5724db6f7ba43c0cfe30cfc82bd37bc1b2a050b57406d953cf66c482d9dd63d0d370cbb3e321134b739c8b61a0d52deacc3264fdf04cb8eebd001c1e8b995f12814779127189cf10d1cd67fb84647d6af91df3f8efb18aabf1255fe1f5e5dd3c372231600daa53e2fe2da97e5de3161f80d154deb

20轮AEAD

Nonce

27d481305a41e867520fe8f5ba433ec7cf5e0f6558e4febd

密文

125c3f45a857e826769118f0ff983249003ae1bb908183355cd4876a38fe8d9687ddc15bf22828a2782e81560209f82dca1756ca9d01a4f81304272cf57fbe9eca8b117f56fbe6a43f3bce7385e112492c32db40a467dbbff541af64ca27fde182e0f5f6e8c7d9915f5047961d615066d4c48ade7de0257e42ea98d84017efc0ffb72b08f48f00f1d95922d4f2640777c7f67602ad407bc3328864c96078150fa58397882a79b79bf6d3cf07cbb27afab9

免费评分

参与人数 15吾爱币 +16 热心值 +15 收起 理由
kanglong + 1 + 1 --------虽然看不懂怎么用,但是支持我风
IcePlume + 1 + 1 我很赞同!
allspark + 1 + 1 用心讨论,共获提升!
19991001 + 1 + 1 热心回复!
xiaochanchan + 1 + 1 --------虽然看不懂怎么用,但是支持我风
laotzudao0 + 1 + 1 我很赞同!
buluo533 + 1 + 1 用心讨论,共获提升!
ioyr5995 + 1 + 1 用心讨论,共获提升!
laozhang4201 + 1 + 1 热心回复!
Fwing + 1 + 1 谢谢@Thanks!
yixi + 1 + 1 谢谢@Thanks!
sky1209 + 1 + 1 用心讨论,共获提升!
开心熊猫741 + 1 + 1 热心回复!
Tonyha7 + 2 + 1 谢谢@Thanks!
天业电子 + 1 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

linsixi 发表于 2026-4-25 22:22
不错,感觉分享,学习一二。。
tingfengkanhai 发表于 2026-4-26 00:13
感谢楼主分享,项目已经加星标,收藏从未停止,学习从未停止
sky1209 发表于 2026-4-26 16:22
感谢楼主分享,虽然看不懂,但一直在关注您的贴子。收藏中!
我爱胡萝卜 发表于 2026-4-26 17:48
这个可得好好研究学习一下
yuanrenyuan1 发表于 2026-4-27 21:47
支持大佬,学习思路
Xandor 发表于 2026-4-28 14:53
支持支持!
laotzudao0 发表于 2026-4-28 15:15
感谢大佬,github上看看
cheng1213 发表于 2026-4-30 00:44
感谢大佬
IcePlume 发表于 2026-5-2 04:24
感谢大佬,学习思路
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-5-11 23:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表