Y
Y
Yam0lod5y2021-10-01 01:54:14
Delphi
Yam0lod5y, 2021-10-01 01:54:14

RC4 why not complete result?

In general, I'm trying to transfer js code to delphi, but when checking, it gives a cut in delphi, not all text is encrypted here
js

function rc4(key, str) {
        /* jshint bitwise: false */
        var s = [], j = 0, x, res = '';
        for (var i = 0; i < 256; i++) {
            s[i] = i;
        }
        for (i = 0; i < 256; i++) {
            j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;
            x = s[i];
            s[i] = s[j];
            s[j] = x;
        }
        i = 0;
        j = 0;
        for (var y = 0; y < str.length; y++) {
            i = (i + 1) % 256;
            j = (j + s[i]) % 256;
            x = s[i];
            s[i] = s[j];
            s[j] = x;
            res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);
        }
        return res;
    }

and here is delphi
function RC4Encrypt(key, Text: String): String;
var
  i, j, X, Y: Integer;
  s: array [0 .. 255] of Integer;
  charCode: Integer;
  ct: String;
  ctInt: Integer;
begin
  for i := 0 to 255 do
  begin
    s[i] := i;
  end;
  j := 0;
  for i := 0 to 255 do
  begin
    charCode := Ord(char(key[(i MOD Length(key)) + 1]));
    j := (j + s[i] + charCode) MOD 256;
    X := s[i];
    s[i] := s[j];
    s[j] := X;
  end;
  i := 0;
  j := 0;
  ct := '';
  for Y := 0 to (Length(Text) - 1) do
  begin
    i := (i + 1) MOD 256;
    j := (j + s[i]) MOD 256;
    X := s[i];
    s[i] := s[j];
    s[j] := X;
    ctInt := Ord(char(Text[Y + 1])) xor (s[((s[i] + s[j]) MOD 256)]);
    ct := concat(ct, String(Chr(ctInt)));
  end;
  Result := ct;
end;

There are 2 values, one from delphi, the other from js

1 значение delphi
8M¨=ÎJ¾2páS
ËÁÛ+<TÐWPÒµ Â\;TYcEÅ)PÙ	uø¥Ö#zÙëí|®iuw)0ø<E~£ëp_øíõT\¥¡í0cÆ£uúÓÝ;!TýeHÙ¥W2,W©xNñ
¯+ðD\ØÈ"óN-?ÜS6]àÝb~( ÁeIq
2 значение js
8M¨=ÎJ\u001d¾2\fpáS\nËÁÛ+<TÐWPÒ\u001aµ\u0018 \u0019Â\\;T\u001eYcEÅ)PÙ\tuø\u001b\u001a\u001f¥\u001cÖ#zÙë\fí\u001f\u001f|®iu\u0002w)0ø<E~£\bë\u0011\u000e\u0001p_øíõT\\¥\u0007¡í0cÆ£uúÓÝ;!T\u000fýeHÙ¥W2,W©xNñ\u000b\r¯+ðD\\ØÈ\"óN-\u0019?ÜS6]àÝb~( ÁeIq\u0000O\u001a­±®`¢Ú¹\u0004\ftzÒýEÖÿ\[email protected]\u000eåÚ>óòz.ý¨\naG(ËÓgPRÔΨKÙ\u001e$a¢7C[\u000e\u0014³ ÿ4bÇ8ó´ì=ζoS^Ûj\u0004ý5\n¿]\u001bJNêa}~`r×ë\u0014´(·Ôék`\u0013ÙôB¨þ_îr\u0018Íí§uÆ\u0011ß\u0005fzãÒ\u0011²0X.\u001eÂ\tÿ\u0005ËFMYØLó]ä=\u001d99îØöA\u00164׿Xv\u0007c%ôk]Îw¦Ri\u0011ø\u0013K}B.]ycйZ\u0005±ëçR]dò!&hà1¡\u0003ÐÐ%Èù\u001a²®øücè.Õh¿ÞÅáFÉ©ûdC®i\u0012\tHpò1Ûâ*u[:«\u0004íA×®\u001b+Ðô>±qª3ÔÓÇ[¯=rD°Õöó©óÈB£+J¾#}QTÁÍDP}¯È\u0005+ÞPJ±¸\bSîC¦®ÔU³à\u0010\u000eôEH¶N\u0018÷b\bô´£ \rJ¡C -Ö\b\u0002ªâJþ`^#\tÇÛ$/GºÚ\\Ý\u000bOòµ<$\"7hµßø{êÞÆ[email protected]\tÕÓ°\"ª¢\u0012Z7FßC±7ø¨`l8\u001dF\u001aÕðÏj\u0000A!°\u000bËNvÃ\u0003E}÷\u0006Â}Ýa\u0019¼?d£\u0010\u0000í`P0ËExzÖ¦C\\ã¸èÜKmâVâ¹=]Á«\u001fÖ\tíc5T½?ûirnô´]:rûÌÛ/º÷RiÑÄù,f÷f7ÓåFÎcð\u0011ºÀiëÊ\u0010´8µUÎæÊ\u001a&@{Øßé¢Æ)=\u001eªÑѳy\b\u0011òd([ »q*¨ï×É\u0017\u0014\b\u0010R>f\u001eÎö#âhE³eMÀlS\fæ\u0002~'Í\u0019ÄFÍUõM\u0001^ä\u0019aÃ2ü¢xc>k`\u0001N\u0010\u0013Ñ8ãêýµ\u001a¨Æ¡Å\u000bÉ2<4\u0001<ØF1Ç

and here is the base64 encoding
Javascript значение
"OE3ClcKowpU9wobDjkrCgB1/wr4yDHDDoVMKwozDi8OBw5vCnys8VMOQV1DDkhrCtRjCj8KgGcKdw4JcO1QeWWNFw4XCmylQw5kJdcO4wpUbGh/CisKlHH/DliN6w5nDqwzDrcKYHx98wq5pdQJ3KTDDuDxFfsKjCMOrEQ7CjAFwwphfwp/DuMOtw7VUwo5cwqUHwqHCk8OtMGPClMOGwqPClHXDusOTw507IcKPwpBUD8O9wpVlSMOZwqVXMixXwql4TsKPwoHDscKPCw3CryvDsERcwofDmMOIwoIiw7NOLRk/w5xTNl3Cl8KJw6DDnWJ+KMKgw4FlSXEATxrCrcKxwoPCrmDCosOawrkEDHTCh3rDksO9RcOWw78QQA7DpcOaPsOzw7J6wp7Cjy7DvcKoCmFHKMOLw5NnUFLDlMOOwqhLw5keJGHCojdDWw4UwoJ/wrPCoMO/NGLDhzjDs8K0w6w9w47Ctm9TXsObwoVqBMO9NQrCv10bSk7DqmF9fmBywpDDl8OrFMK0KMK3w5TCisOpwpBrYBPDmcO0QsKow75fw65ywpEYw43DrcKndcOGEcOfBWbClnrDo8OSEcKVwrIwWC4ew4IJw78Fw4tGTVnDmEzDs13DpD0dOTnDrsOYw7ZBFjTDl8K/WHYHYyXDtGtdw453wqZSaRHDuBNLwpB9QsKKLl15Y8OQwrlaBcKxw6vDp1Jdwpdkw7IhJmjDoDHClMKhA8OQw5Alw4jDuRrCssKuw7jDvGPDqC7DlWjCv8KMw57DhcOhRsOJwqnDu2RDwq5pEglIcMOyMcObw6IqdVs6wqsEw61Bw5fCrhsrw5DDtD7CsXHCqjPDlMOTw4dbwozCr8KEPXJEwrDDlcO2wpvDs8Kpw7PDiELCoytKwr4jfVFUw4HCkcKXw41EUMKFwpvChX3Cr8OIBSvDnlBKwrHCuAhTw67Ck0PCgsKmwq7DlFXCs8OgEA7DtEVIwrZOGMO3YgjDtMOCwrTCoyANSsKhQyAtw5YIAsKBwqrDokrDvmBeIwnDh8ObwoIkL0fCjcK6woLDmlzDnQtPw7LCtTzCkSQiN2jCtcOfw7h7w6rDnsOGTkBjCcOVw5PCsCLCqsKiElo3RsOfQ8KxN8O4wqhgbDjCix1GwpQaf8OVw7DDj2oAQSHCsMKaC8OLTnbCm8ODA8KeRX3Dt8KZBsOCfcOdYRnCvD9kwqMQwoIAwpbCh8OtwpdgUDDDi0V4esOWwqZDXMKWwpTDo8K4w6jDnEttw6JWw6LCuT1dw4HCqx/DlgnDrWM1VMK9wpQ/woXDu2nCgXJuw7TCtMKIXTrClMKfcsO7w4zDmy/CjsK6w7fCnFJpw5HDhMO5LGbDt2Y3wp7Dk8OlRsOOY8OwEcK6w4Bpw6vDihDCtDjCtVXDjsOmworCkMOKwooaJkB7w5jDn8OpwqLDhik9HsKLwo/CqsORw5HCs3kIEcOyZChbIMK7cSrCqMOvw5fDicKAwpIXFAgQUsKQPmYew47DtiPDomhFwrNlwo5NwprDgGxTDMOmAn4nw40Zw4RGw41Vw7VNAV7DpBlhw4Myw7zConhjPmtgAU4QE8OROMKdw6PCmcOqw73CtRrCqMOGwoPCjcKhw4ULw4kyPDQBPMKJw5hGMcOH"
delphi значение, видно, что правильно кодирует, но почему не весь текст?
OE3ClcKowpU9wobDjkrCgB1/wr4yDHDDoVMKwozDi8OBw5vCnys8VMOQV1DDkhrCtRjCj8KgGcKdw4JcO1QeWWNFw4XCmylQw5kJdcO4wpUbGh/CisKlHH/DliN6w5nDqwzDrcKYHx98wq5pdQJ3KTDDuDxFfsKjCMOrEQ7CjAFwwphfwp/DuMOtw7VUwo5cwqUHwqHCk8OtMGPClMOGwqPClHXDusOTw507IcKPwpBUD8O9wpVlSMOZwqVXMixXwql4TsKPwoHDscKPCw3CryvDsERcwofDmMOIwoIiw7NOLRk/w5xTNl3Cl8KJw6DDnWJ+KMKgw4FlSXE=

The question is, what's wrong with Delphi code?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
O
OCTAGRAM, 2021-10-01
@OCTAGRAM

Instead of Chr, which returns it is not clear what, Char is needed for the analogy. Or is it what version of Delphi? In the old ones (2007 and older), for analogy, this is WideChar.
Looked, and on what the Delphi version is interrupted. In JavaScript, this is \u0000. One might think that Delphi worked as it should, and the problem is in the display system, which is encoded in an outdated programming language with an outdated string length encoding system with a null character embedded at the end of the string. Change the piece where it is being cut, and the line will be preserved in its entirety.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question