close
 

這段程式碼定義了一個名為 Decrypt-DataAndDisplay 的函式,用來解密加密後的資料並顯示解密結果。讓我來解釋每一部分的功能:

  1. 函式定義 (Decrypt-DataAndDisplay):

    • 參數: 函式接受三個參數,分別是加密後的資料檔案路徑 ($EncryptedFilePath)、加密金鑰檔案路徑 ($KeyFilePath) 和初始化向量檔案路徑 ($IVFilePath)。
    • 功能: 該函式首先讀取加密後的資料檔案 ($EncryptedFilePath) 的位元組陣列。接著,它從指定的檔案路徑讀取加密金鑰和初始化向量,將這些 Base64 編碼的資訊轉換為位元組陣列。
    • AES 解密器建立: 使用 .NET Framework 提供的 System.Security.Cryptography.Aes 類別建立 AES 解密演算法物件,並設定金鑰 (Key) 和初始化向量 (IV)。
    • 解密過程: 建立解密器 ($decryptor),使用解密器對加密後的位元組陣列進行解密 (TransformFinalBlock 方法),並將解密後的位元組陣列轉換為 UTF-8 編碼的文字 ($DecryptedText)。
    • 顯示結果: 最後將解密結果顯示在命令列中。
  2. 設定檔案路徑:

    • 定義了三個變數來指定加密金鑰檔案、初始化向量檔案和加密後的資料檔案的路徑。
  3. 呼叫解密函式:

    • 使用定義好的檔案路徑變數來呼叫 Decrypt-DataAndDisplay 函式,解密指定的加密後的資料檔案。

這段程式碼主要利用了 .NET 中的加密 API (Aes 類別) 來實現 AES 解密的功能,並使用 PowerShell 來處理檔案讀取和顯示。

# 定義函數:解密資料並輸出顯示
function Decrypt-DataAndDisplay {
    param (
        [string]$EncryptedFilePath,  # 加密後的檔案路徑
        [string]$KeyFilePath,        # 加密金鑰檔案路徑
        [string]$IVFilePath          # 初始化向量檔案路徑
    )

    Write-Host "解密資料..."

    try {
        # 讀取加密後的位元組陣列
        $EncryptedBytes = [System.IO.File]::ReadAllBytes($EncryptedFilePath)

        # 讀取金鑰和初始化向量
        $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

        # 建立解密器並進行解密
        $decryptor = $AesAlg.CreateDecryptor($AesAlg.Key, $AesAlg.IV)
        $DecryptedBytes = $decryptor.TransformFinalBlock($EncryptedBytes, 0, $EncryptedBytes.Length)

        # 將解密後的位元組陣列轉換為文字
        $DecryptedText = [System.Text.Encoding]::UTF8.GetString($DecryptedBytes)

        Write-Host "解密結果:" -ForegroundColor Green
        Write-Host $DecryptedText
    } catch {
        Write-Host "解密過程中發生錯誤: $_" -ForegroundColor Red
    } finally {
        if ($AesAlg) { $AesAlg.Dispose() }
        if ($decryptor) { $decryptor.Dispose() }
    }
}

# 設定檔案路徑
$KeyFilePath = "C:\temp\aes_key.txt"             # 加密金鑰檔案路徑
$IVFilePath = "C:\temp\aes_iv.txt"               # 初始化向量檔案路徑
$EncryptedFilePath = "C:\temp\encrypted_data.txt"  # 加密後的資料檔案路徑

# 呼叫解密函式,解密加密後的資料並顯示
Decrypt-DataAndDisplay -EncryptedFilePath $EncryptedFilePath -KeyFilePath $KeyFilePath -IVFilePath $IVFilePath


 

參考資料:

ChatGPT 問答測試結果


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 sungshu 的頭像
    sungshu

    sungshu手札筆記本

    sungshu 發表在 痞客邦 留言(0) 人氣()