• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JS kodowanie stringu własnym "szyfrem"

Object Storage Arubacloud
+1 głos
378 wizyt
pytanie zadane 7 kwietnia 2021 w JavaScript przez hihijsonel Obywatel (1,250 p.)

Witam, 

mam taki oto kod (przepraszam za nieczytelne nazwy wygrałbym konkurs na najnieczytelniejszy kod):

var encode = (str, encpsw) => {
  var codes = [];
  for (var i = 0; i < str.length; ++i) codes.push(str.charCodeAt(i));
  var pswcodes = [];
  for (var i = 0; i < encpsw.length; ++i) pswcodes.push(encpsw.charCodeAt(i));
  var bsns = [];
  for (var i = 0; i < str.length; ++i) if (str.charAt(i) === "\n") bsns.push(i);

  var adcds = [];
  for (var i = 0; i < str.length; ++i)
    adcds.push(codes[i] + pswcodes[i % pswcodes.length]);

  var j = 10,
    enccds = [];
  for (var i = 0; i < adcds.length; ++i) {
    enccds.push(adcds + i + j);
    if (bsns.includes(i)) j += 10;
  }

  var encoded = "";
  for (var i = 0; i < enccds.length; ++i)
    encoded += String.fromCharCode(enccds[i]);
  return encoded;
};

próbuję "zaszyfrować" string sposobem który wymyśliłem, polegającym na:

  • zapisaniu gdzieś kodów znaków stringu,
  • zapisaniu gdzieś kodów znaków hasła,
  • zapisaniu gdzieś miejsca enterów,
  • "dodanie" kodów stringu i hasła i zapisaniu tego,
  • do każdego kodu dodanie jego "miejsca" w stringu i 10*linia w której występuje,
  • zrobienie z tego stringu.

Czy ktoś wie dlaczego dla jednego znaku to działa, a dla kilku daje same spacje?

Z góry dziękuję za odpowiedź.

1 odpowiedź

0 głosów
odpowiedź 7 kwietnia 2021 przez VBService Ekspert (253,100 p.)
edycja 7 kwietnia 2021 przez VBService

Twój zapis "rozbiłem" na "kroki" najciekawszy jest numer 7 no i w konsekwencji 8.  surprise

var encode = (str, encpsw) => {
  var codes = [];
  console.warn('1', str, encpsw);
  for (var i = 0; i < str.length; ++i) codes.push(str.charCodeAt(i));
  console.warn('2', codes);
  var pswcodes = [];
  for (var i = 0; i < encpsw.length; ++i) pswcodes.push(encpsw.charCodeAt(i));
  console.warn('3',pswcodes);
  var bsns = [];
  for (var i = 0; i < str.length; ++i) if (str.charAt(i) === "\n") bsns.push(i);
  console.warn('4',bsns);
 
  var adcds = [];
  for (var i = 0; i < str.length; ++i){
    adcds.push(codes[i] + pswcodes[i % pswcodes.length]);
    console.log('5',pswcodes[i % pswcodes.length]);
  }
    
 console.warn('6',adcds);
  
  var j = 10,
    enccds = [];
  for (var i = 0; i < adcds.length; ++i) {
    enccds.push(adcds + i + j);
    if (bsns.includes(i)) j += 10;
  }
 
  console.warn('7',enccds);
  
  var encoded = "";
  for (var i = 0; i < enccds.length; ++i) {
    encoded += String.fromCharCode(enccds[i]);
    console.info('8',enccds[i]);
  }
  return encoded;
};

console.log(encode('Lorem','lo'));

W tym przypadku to raczej "ciężko" jest wykonać prawidłowo

 String.fromCharCode(enccds[i]) 

gdy np.: dla i=0 mamy: enccds[i] = 184,222,222,212,217010

komentarz 7 kwietnia 2021 przez hihijsonel Obywatel (1,250 p.)
Nie wiem co dokładnie jest źle, ale z tego co wymyśliłem, wynika, że kody dwóch różnych znaków mogą mieć tę samą wartość nawet przy tej samej przypadającej na nie literze hasła, bo w grę wchodzą też "miejsce" znaku w stringu i liniika, np:
+11 +12 +13 +14 ENTER
+21 +22 +23 +24 +25 +26 +27 +28 ENTER
+31 +32 +33.
Nawet przy tej samej literze hasła mają inną pozycję, więc chyba jest dobrze
komentarz 7 kwietnia 2021 przez VBService Ekspert (253,100 p.)
Moim zdanie algorytm szyfrujący, powinien działać i dla tekstu, który jest zapisany w jeden linii, jak i w kilku liniach. np.:

1. "Ala ma kota"

2. "Ala ma kota ENTER
      a kot ma Alę"
komentarz 7 kwietnia 2021 przez hihijsonel Obywatel (1,250 p.)
Jeśli to co zrobiłem działało by poprawnie, to by działał dla tekstu w wielu liniach. Gdyby przestawić np 1 literę to by był zupełnie inny wynik. Załóżmy, że kod "a" to 1, "b" to 2, a "c" to 3. W takim przypadku
abc         >>>       12 14 16

____________________________

ab

c              >>> 12 14 26

____________________________

a

bc           >>> 12 24 26
komentarz 7 kwietnia 2021 przez VBService Ekspert (253,100 p.)
A dla : abca?
a=1, b=2, c=3, a=?
komentarz 7 kwietnia 2021 przez hihijsonel Obywatel (1,250 p.)
gdyby założyć, że kod "a" to 1, "b" to 2, "c" to 3, to:
10*1+1+1=12        10*1+2+2=14       10*1+3+3=16        10*1+4+1=15
10linia+pos+kod   10linia+pos+kod    10linia+pos+kod   10linia+pos+kod
komentarz 7 kwietnia 2021 przez VBService Ekspert (253,100 p.)
edycja 7 kwietnia 2021 przez VBService

Chyba jeszcze raz musisz przemyśleć Twój algorytm. Chodzi o tą tablicę enccds, która "wygląda"

gdy np.: dla i=0 mamy: enccds[i] = "184,222,222,212,217010"

i powoduje problem z

 String.fromCharCode(enccds[i]) 

komentarz 7 kwietnia 2021 przez hihijsonel Obywatel (1,250 p.)

Przemyślałem algorytm, i był dobry ALE znalazłem błąd w liniice 16 (u ciebie 24):

zamiast adcds[i] napisałem adcds. Jakby ktoś chciał, to oto kod (+funkcja deszyfrująca): 

var encode = (str, encpsw) => {
    var codes = [];
    for (var i = 0; i < str.length; ++i) codes.push(str.charCodeAt(i));
    var pswcodes = [];
    for (var i = 0; i < encpsw.length; ++i) pswcodes.push(encpsw.charCodeAt(i));
    var bsns = [];
    for (var i = 0; i < str.length; ++i)
      if (str.charAt(i) === "\n") bsns.push(i);

    var adcds = [];
    for (var i = 0; i < str.length; ++i)
      adcds.push(codes[i] + pswcodes[i % pswcodes.length]);

    var j = 10,
      enccds = [];
    for (var i = 0; i < adcds.length; ++i) {
      enccds.push(adcds[i] + i + j);
      if (bsns.includes(i)) j += 10;
    }

    var encoded = "";
    for (var i = 0; i < enccds.length; ++i)
      encoded += String.fromCharCode(enccds[i]);
    return encoded;
  },
  decode = (str, dcpsw) => {
    var codes = [];
    for (var i = 0; i < str.length; ++i) codes.push(str.charCodeAt(i));
    var pswcodes = [];
    for (var i = 0; i < dcpsw.length; ++i) pswcodes.push(dcpsw.charCodeAt(i));

    var decoded = "";

    var j = 10;
    for (var i = 0; i < str.length; ++i) {
      decoded += String.fromCharCode(codes[i] - pswcodes[i%pswcodes.length] - i - j);
      if(decoded.charAt(decoded.length - 1) == '\n') j += 10;
    }

    return decoded;
  };

 

komentarz 7 kwietnia 2021 przez VBService Ekspert (253,100 p.)

Przemyślałem algorytm, i był dobry

Jest dobry, poza tym błędem.  wink 

Podobne pytania

+1 głos
1 odpowiedź 1,515 wizyt
pytanie zadane 14 grudnia 2020 w C i C++ przez Destro04 Nowicjusz (130 p.)
0 głosów
3 odpowiedzi 2,235 wizyt
pytanie zadane 27 września 2019 w C# przez pitersooon98 Nowicjusz (200 p.)
0 głosów
1 odpowiedź 391 wizyt
pytanie zadane 22 lutego 2018 w Bezpieczeństwo, hacking przez ChiriChiri Obywatel (1,260 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...