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

VPS Starter Arubacloud
+1 głos
376 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 (251,170 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 (251,170 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 (251,170 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 (251,170 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 (251,170 p.)

Przemyślałem algorytm, i był dobry

Jest dobry, poza tym błędem.  wink 

Podobne pytania

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

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...