当前位置: 首页 > news >正文

nim加密解密文件(AES算法)

nim加密解密文件(AES算法)

import os
import crypto/aes
import strutilsproc usage(): void =echo "Usage: aes_encryptor [options] <file_path>"echo "Options:"echo "  -r            Enable recursive encryption of folder"echo "  -i            Encrypt in-place (no new file)"echo "  -k <key>      Specify encryption key (plaintext, 16, 24, or 32 bytes)"echo "  -d            Decrypt mode (for decryption)"echo "  -p <key>      Specify decryption key (plaintext, 16, 24, or 32 bytes)"let key = ""
let inPlace = false
let recursive = false
let decryptMode = false
let decryptKey = ""proc parseArgs(): void =for arg in commandlineParams():if arg.startsWith("-k") or arg.startsWith("--key"):key = arg[2..^]elif arg.startsWith("-i") or arg.startsWith("--in-place"):inPlace = trueelif arg.startsWith("-r") or arg.startsWith("--recursive"):recursive = trueelif arg.startsWith("-d") or arg.startsWith("--decrypt"):decryptMode = trueelif arg.startsWith("-p") or arg.startsWith("--key"):decryptKey = arg[2..^]else:if not decryptMode:if key == "":echo "Error: Key is required."quit()if arg == "" or arg == "decrypt":echo "Error: File path is required."quit()let file = argif decryptMode:echo "Error: Decrypt mode needs a key, but file path was provided."quit()proc encryptFile(path: string, key: string, inPlace: bool): void =let keyBytes = key.toBytesif keyBytes.len not in [16, 24, 32]:echo "Error: Key length must be 16, 24, or 32 bytes."quit()var file = open(path, "rb")var content = file.readAll()file.close()let cipher = AES.createCipher(keyBytes, AES.randomIV)let encrypted = cipher.encrypt(content)if inPlace:var outFile = open(path, "wb")outFile.write(encrypted)outFile.close()echo "Encrypted file in-place: ", pathelse:let newPassword = path & ".aes"var outFile = open(newPassword, "wb")outFile.write(encrypted)outFile.close()echo "Encrypted file saved as: ", newPasswordproc decryptFile(path: string, key: string): void =let keyBytes = key.toBytesif keyBytes.len not in [16, 24, 32]:echo "Error: Key length must be 16, 24, or 32 bytes."quit()var file = open(path, "rb")var encryptedData = file.readAll()file.close()let cipher = AES.createCipher(keyBytes, AES.randomIV)let decrypted = cipher.decrypt(encryptedData)let newfile = path[0..path.len - 4]  # Remove .aes extensionvar outFile = open(newfile, "wb")outFile.write(decrypted)outFile.close()echo "Decrypted file saved as: ", newfilewhen isMainModule:parseArgs()if decryptMode:if decryptKey == "":echo "Error: Decryption key is required."usage()quit()decryptFile(commandlineParams[0], decryptKey)else:if key == "":echo "Error: Encryption key is required."usage()quit()if commandlineParams.len < 1 or commandlineParams[0] == "":echo "Error: File path is required."usage()quit()let file = commandlineParams[0]if recursive:for item in walkDir(file):if item.isDir:continueencryptFile(item.path, key, inPlace)else:encryptFile(file, key, inPlace)

2439905184/nim_aes_encryptor: Nim语言写的aes加密解密文件工具 - Codeberg.org

http://www.jsqmd.com/news/644843/

相关文章:

  • 什么是Harness Agent?Harness与OpenClaw核心区别+迁移可行性全解析(2026年最新)
  • 2026年可靠的韶山红杜鹃购买途径,成活率保障情况分析 - myqiye
  • 李沐深度学习优化算法
  • 如何3分钟搞定加密音乐:Unlock-Music终极免费解锁指南
  • VoxCPM部署教程:构建AI语音交互系统
  • Navicat试用期重置终极指南:简单安全的macOS数据库工具试用延长方案
  • 拓朋A36plus对讲机,户外电影拍摄的清晰指挥
  • 2026年南昌市锡灰回收公司最新推荐榜:通信板回收/巴氏合金回收/回收镀金镀银/锡铋合金回收/回收各类锡废料 - 品牌策略师
  • 【SpringBoot- OAuth2授权认证】
  • 告别模糊:ENVI中NNDiffuse融合算法实战,让GF2多光谱影像细节拉满
  • Sharetribe Go搜索功能实现原理:基于Sphinx的全文搜索引擎配置
  • 微信视频号推荐算法实战:从GNN到DCN-M的多任务优化探索
  • Electron 开发避坑指南:解决主进程通信、热更新与打包配置中的常见问题
  • Cellpose 4.0.4:零参数细胞分割算法如何让生物医学图像分析变得简单
  • SZT-bigdata数据质量监控:确保分析结果的准确性
  • Kazumi番剧播放器:打造个性化追番体验的完整指南
  • 终极指南:如何用Fan Control免费软件彻底解决电脑噪音与散热问题
  • Chart.js项目贡献指南:如何为awesome列表添加新内容
  • probe-rs项目架构深度剖析:从探针驱动到调试协议的完整实现
  • 5分钟快速上手VTube Studio:打造专业虚拟主播的完整指南
  • Claude Skills到底解决了什么,没解决什么?从代码审查看AI技能模块化的真实代价
  • 你的Endnote样式可能白下了!关于GB/T 7714-2005,这些细节(全角标点、作者“等”、学位论文地点)坑了太多人
  • 【实战】Hermes Agent 深度体验:开源自进化 AI 智能体,三层记忆+自动 Skills+6 平台网关
  • TransformationLayout配置详解:从基础属性到高级参数的完整教程
  • IEA-15-240-RWT 15MW海上风机开源模型:从架构解析到实战部署的完整指南
  • Sakura-13B-Galgame终极配置指南:如何快速部署你的专属ACGN翻译AI
  • 终极指南:3步免费将VR 3D视频转为2D,普通设备也能自由探索VR世界
  • 告别抓瞎!手把手教你用CANoe 10.0从零搭建汽车总线测试环境(VN1640A/VN1630硬件实战)
  • DSAnimStudio完整指南:从零掌握专业游戏动画编辑的终极教程
  • 3分钟搞定Windows UEFI启动画面:告别单调开机界面