close
# 定義函數:加密資料 function Encrypt-Data { param ( [string]$PlainText, # 輸入的明文資料 [string]$KeyFilePath, # 加密金鑰檔案路徑 [string]$IVFilePath, # 初始化向量檔案路徑 [string]$EncryptedFilePath # 加密後的檔案路徑 ) Write-Host "加密資料..." try { # 讀取金鑰和初始化向量 $KeyBase64 = Get-Content -Path $KeyFilePath $IVBase64 = Get-Content -Path $IVFilePath # 將金鑰和初始化向量轉換為位元組陣列 $KeyBytes = [System.Convert]::FromBase64String($KeyBase64) $IVBytes = [System.Convert]::FromBase64String($IVBase64) # 建立 AES 加密演算法物件並設定金鑰與初始化向量 $AesAlg = [System.Security.Cryptography.Aes]::Create() $AesAlg.Key = $KeyBytes $AesAlg.IV = $IVBytes # 建立加密器並進行加密 $encryptor = $AesAlg.CreateEncryptor($AesAlg.Key, $AesAlg.IV) $PlainTextBytes = [System.Text.Encoding]::UTF8.GetBytes($PlainText) $EncryptedBytes = $encryptor.TransformFinalBlock($PlainTextBytes, 0, $PlainTextBytes.Length) # 將加密後的位元組陣列寫入檔案 [System.IO.File]::WriteAllBytes($EncryptedFilePath, $EncryptedBytes) Write-Host "資料已成功加密並存儲到 $EncryptedFilePath。" -ForegroundColor Green } catch { Write-Host "加密過程中發生錯誤: $_" -ForegroundColor Red } finally { if ($AesAlg) { $AesAlg.Dispose() } if ($encryptor) { $encryptor.Dispose() } } } # 安全地提示用戶輸入資料 function Secure-Prompt { param ( [string]$Prompt # 提示用戶的文字 ) $SecureString = Read-Host -Prompt $Prompt -AsSecureString $PlainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString)) return $PlainText } # 設定檔案路徑 $KeyFilePath = "C:\temp\aes_key.txt" # 加密金鑰檔案路徑 $IVFilePath = "C:\temp\aes_iv.txt" # 初始化向量檔案路徑 $EncryptedFilePath = "C:\temp\encrypted_data.txt" # 加密後的資料檔案路徑 # 提示用戶輸入要加密的資料 $DataToEncrypt = Secure-Prompt -Prompt "請輸入要加密的資料" try { # 生成加密所需的金鑰和初始化向量(IV) $AES = [System.Security.Cryptography.Aes]::Create() $AES.GenerateKey() $AES.GenerateIV() # 將金鑰和IV轉換為Base64格式並存儲到檔案 $KeyBase64 = [System.Convert]::ToBase64String($AES.Key) # 將金鑰轉換為Base64格式 $IVBase64 = [System.Convert]::ToBase64String($AES.IV) # 將初始化向量轉換為Base64格式 $KeyBase64 | Out-File -FilePath $KeyFilePath -Force # 將Base64格式的金鑰寫入到檔案 $IVBase64 | Out-File -FilePath $IVFilePath -Force # 將Base64格式的初始化向量寫入到檔案 Write-Host "生成的加密金鑰已保存到 $KeyFilePath。" -ForegroundColor Green # 提示金鑰已保存 Write-Host "生成的初始化向量(IV)已保存到 $IVFilePath。" -ForegroundColor Green # 提示初始化向量已保存 # 呼叫加密函式,將明文資料加密並存儲到指定的加密後檔案 Encrypt-Data -PlainText $DataToEncrypt -KeyFilePath $KeyFilePath -IVFilePath $IVFilePath -EncryptedFilePath $EncryptedFilePath Write-Host "加密完成。" # 加密完成提示 } catch { Write-Host "生成金鑰和初始化向量時發生錯誤: $_" -ForegroundColor Red } finally { if ($AES) { $AES.Dispose() } }
參考資料:
ChatGPT 問答測試結果
全站熱搜
留言列表