• 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"

+1 głos
144 wizyt
pytanie zadane 7 kwietnia 2021 w JavaScript przez hihijsonel Obywatel (1,180 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 Mędrzec (179,290 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,180 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 Mędrzec (179,290 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,180 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 Mędrzec (179,290 p.)
A dla : abca?
a=1, b=2, c=3, a=?
komentarz 7 kwietnia 2021 przez hihijsonel Obywatel (1,180 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 Mędrzec (179,290 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,180 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 Mędrzec (179,290 p.)

Przemyślałem algorytm, i był dobry

Jest dobry, poza tym błędem.  wink 

Podobne pytania

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

88,720 zapytań

137,331 odpowiedzi

306,818 komentarzy

58,907 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...