首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

DelphiX 實戰:TDIB.EncryptDecrypt 影像加密解密

     編輯:Delphi

TDIB.EncryptDecrypt 以對稱演算法對影像像素資料進行加密/解密,同一方法雙向操作(再次呼叫即解密)。本文提供單鍵加密解密的最小範例。

效果預覽

EncryptDecrypt 效果

核心程式碼

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DIB, StdCtrls;
type
  TForm1 = class(TForm)
    DXPaintBox1: TDXPaintBox;
    Button1: TButton; // 載入圖片
    Button2: TButton; // 加密/解密
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;
var Form1: TForm1;
implementation {$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const ImgPath1 = 'C:\Temp\DX.jpg';
begin
  DXPaintBox1.DIB.LoadFromFile(ImgPath1);
  DXPaintBox1.Width := DXPaintBox1.DIB.Width;
  DXPaintBox1.Height := DXPaintBox1.DIB.Height;
  DXPaintBox1.Repaint;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // EncryptDecrypt(Key: Integer)
  DXPaintBox1.DIB.EncryptDecrypt(0); // 金鑰 0
  DXPaintBox1.Repaint;
end;
end.

參數與特性

  • Key (Integer):加密金鑰,相同金鑰可解密
  • 對稱操作:對已加密影像再次呼叫相同金鑰即還原
  • 就地修改:直接修改 DIB 像素緩衝區
  • 範圍:僅影響像素資料,不改變尺寸/格式

效果分析

  • 金鑰 0 通常產生類似負片/雜訊的視覺效果
  • 不同金鑰產生不同偽裝模式
  • 非標準加密演算法,**不可用於安全機密資料**

應用場景

  • **遊戲資源簡易保護**:防止直接檢視/竊取圖片資源
  • **隱寫術載體**:加密後嵌入其他圖像
  • **視覺謎題/解謎遊戲**:玩家需找到金鑰解密圖片獲取線索
  • **臨時遮蔽**:截圖分享前快速遮蔽敏感區域

安全性警示

⚠️ 此方法屬於**混淆**而非加密。專業逆向工程可輕易破解。真正需要機密性請使用 AES-GCM、ChaCha20-Poly1305 等經驗證的加密庫,對整個檔案流加密而非僅像素資料。

進階:金鑰派生與分塊加密

procedure EncryptDIBEx(DIB: TDIB; Password: string);
var Key: Integer; Hash: Integer; i: Integer;
begin
  // 簡易密碼派生
  Hash := 0; for i := 1 to Length(Password) do Hash := Hash * 31 + Ord(Password[i]);
  Key := Hash xor $AA55AA55;
  // 分塊加密(不同區域用不同金鑰變體)
  DIB.EncryptDecrypt(Key);
  // 可進一步:按 64x64 區塊,Key = Key xor (BlockX * 17 + BlockY * 23)
end;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved