【发布时间】:2022-11-18 22:52:51
【问题描述】:
我使用这种方法加密小字符串很长一段时间并且工作得很好.. 当我尝试传递一个大字符串(长度 > 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
【问题讨论】:
-
问题从什么字符串大小开始?这会给你一个线索。
-
您使用的是哪个 Delphi 版本?自 Delphi 2009 起,
string类型从 Ansi 切换到 Unicode。这意味着,一个字符不再等于一个字节。所以你的byte-casts 看起来很可疑! -
也许加密逻辑导致某些字符变为#0,并且您用来查看加密字符串的方法在那里停止输出(即它看到字符串就好像它是空终止的一样)?
-
@rossum,有时 128.. 其他时间 250.. 它是随机的
-
将文本转换为 UTF-8、加密字节数组(即您的 UTF-8 字节)以及将字节转换为 base64 字符串的示例数不胜数。这是一个被没完没了地讨论的话题。你为什么不自己寻找而不是让我们再举一个例子呢?
标签: delphi