我使用這種方法加密小字串很長一段時間并且作業得很好.. 當我嘗試傳遞一個大字串(長度> 500)時它不起作用有人可以告訴我為什么嗎?
`function Encrypt(const Text: string): string;
var
i: Byte;
Key: Word;
strTemp: string;
const
KEY = 7519;
KEY1 = 03001;
KEY2 = 002279;
begin
Key := KEY;
SetLength(strTemp, Length(Text));
Result := '';
for i := 1 to Length(Text) do
begin
strTemp[i] := Char(byte(Text[I]) xor (Key shr 8));
Result := Result IntToHex(Byte(strTemp[i]), 2);
Key := (Byte(strTemp[i]) KEY) * KEY1 KEY2 ;
end;
end;`
我嘗試在base64中傳遞一個大約5000個字符的大值,加密后的結果大約是250個字符..
我正在嘗試加密 base64 文本.. 從 .jpeg 中提取的 base64
例子:
var vText: AnsiString;
vText := 'iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAYAAADo08FDAAAgAElEQVR4XuydUbbjOJIss5bR 19oz' '1Fla1KpS4kgCcLdI z9XpBhbgGRfIisnn/ 85///PcX/w8DGMAABsoa Oeff8pmew1WMWelTJWyPPZdt' 'TzP31LVXO8PwS45jz788XLUmMd6 ubRh8oU//0vRwZp/aVnnzvWxU3FnNUyVcpTKcvz6VExzFgtU6U8l' 'bJUHGp/e09U693eO5G/YwADGOhggAFwhy6TEQMYaGegy0FyxZyVMpHF99FTqTcMfsf2';
結果 = 6EA0B289D3DB602BC0EFCC2F2B38A54FF5916CE39FF43E4F7CACFFF7BB372D2E5485038DE606514C0BC943D55B9246C8
uj5u.com熱心網友回復:
- 你的程式不能像你在這個例子中展示的那樣編譯,因為
您標記了這個問題Delphi,并且識別符號不區分大小寫:var Key: Word; const KEY = 7519;KEY無法定義,因為Key已經存在。這可能僅在Pascal中是可能的。因此,請根據您的實際代碼檢查您給我們的示例。 - 您的回圈變數不夠大:
應該var i: Byte; begin for i := 1 to Length(Text) doLength(Text)是 304,那么回圈將只運行 48 次迭代,因為Byte最多可以容納 256 個值。如果回圈結束條件的值高于變數能夠容納的值,則從該結束條件中減去變數的最大數量。即 304 減去 256 等于 48。 - 當您只需要一個字符時,為什么需要一個臨時字串?即便如此,您也只能將 is 視為 Byte,那么為什么不使用它呢?
這可以寫得更清晰:var strTemp: string; begin SetLength(strTemp, Length(Text)); for i := 1 to Length(Text) do begin strTemp[i] := Char(...); Result := Result IntToHex(Byte(strTemp[i]), 2); Key := (Byte(strTemp[i]) ...)...;var byteTemp: Byte; begin for i := 1 to Length(Text) do begin byteTemp := Byte(Text[I]) xor (Key shr 8); Result := Result IntToHex(byteTemp, 2); Key := (byteTemp KEY0) * KEY1 KEY2; - 從不加密文本- 而是加密位元組。宣告書
將根據 Delphi 版本而有所不同。為什么不至少做到這一點function Encrypt(const Text: string): string;AnsiString?或者更好:TBytes或者Array of Byte?在處理任何一種型別時,String您永遠無法確定一個字符需要多少位元組。在 Delphi 2009 及更高版本中使用String每個字符使用超過 1 個位元組,因此Byte(String[i])您如履薄冰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/536569.html
標籤:德尔福
上一篇:OUT引數不符合檔案
