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
