Код: Выделить всё
Код: Выделить всё
procedure TMainForm.Encrypt1ButtonClick(Sender: TObject);
var
Cipher: TDCP_rijndael;
Key, Vector: RawByteString;
Data, Crypt: RawByteString;
begin
Data := 'Hello, world!';
SetLength(Crypt, Length(Data));
Key := 'bRuD5WYw5wd0rdHR9yLlM6wt2vteuini';
Vector := 'bf49ea9d61104d8c';
Cipher := TDCP_rijndael.Create(nil);
try
Cipher.Init(Key[1], 256, @Vector[1]);
Cipher.EncryptCTR(Data[1], Crypt[1], Length(Data));
finally
Cipher.Free;
end;
EncryptEdit.Text := DCPBase64.Base64EncodeStr(Crypt);
end;
Однако, если я скомпилирую один и тот же код для Android и запущу его на своем планшете, я получу совсем другое результат. Почему?
Я читал документацию о преобразовании кода для fmx, особенно о том, что касается обработки строк, но до сих пор не понимаю, почему. Даже если RawByteString будет начинаться с 0 вместо 1, я все равно получаю разницу (пробовал с [0] вместо [1]). К RawByteString не прикреплена кодовая страница, верно? Таким образом, проблема не может быть вызвана каким-либо преобразованием строк (я думаю). Так что же здесь происходит?
Подробнее здесь: https://stackoverflow.com/questions/435 ... ndroid-ios