2016-05-04 4 views
1

Also habe ich diese Chiffre gemacht und im Moment, wenn ich 'a' mit einer Verschiebung von 1 eintippe gibt es 'b' aus Das ist richtig, aber wenn ich 'ab' oder eine andere Länge der Saite einfüge, wird 'bl' zum Beispiel gesetzt. Wie behebe ich das?Wie kommt es, dass meine Chiffre immer nur den ersten Buchstaben korrekt verschlüsselt, aber nicht den zweiten, dritten usw.

function encryption(str, amount) { 
    var str = document.getElementById('inputText').value; 
    var amount = document.getElementById('amountDropdown').value; 
    var result = ""; 
    //loop through each character in word 
    for (var i = 0; i < str.length; i++) { 
    var c = str.charCodeAt(i); 
    //If the character is uppercase 
    if ((c >= 65) && (c <= 90)) { 
     result += String.fromCharCode(((c - 65 + amount) % 26) + 65); 
    } 
    //if the character is lowercase 
    else if ((c >= 97) && (c <= 122)) { 
     result += String.fromCharCode(((c - 97 + amount) % 26) + 97); 
    } 
    //if the character isn't a letter 
    else { 
     result += str.charAt(i); 
    } 
    } 
    //return the result 
    outputResult.innerHTML = "The text you have input has been encrypted to.." + result; 
} 

function decryption() { 
    var str = document.getElementById('inputText').value; 
    var amount = document.getElementById('amountDropdown').value; 
    var result = ""; 
    //loop through each character in word 
    for (var i = 0; i < str.length; i++) { 
    var c = str.charCodeAt(i); 
    //If the character is uppercase 
    if (c >= 65 && c <= 90) { 
     result += String.fromCharCode((c - 65 - amount) % 26 + 65); 
    } 
    //if the character is lowercase 
    else if (c >= 97 && c <= 122) { 
     result += String.fromCharCode((c - 97 - amount) % 26 + 97); 
    } 
    //if the character isn't a letter 
    else { 
     result += str.charAt(i); 
    } 
    } 
    //return the result 
    outputResult.innerHTML = "The text you have input has been encrypted to.." + result; 
} 

function encryptClickHandler() { 
    document.getElementById('inputText').value = encrypt(document.getElementById('inputText').value, document.getElementById('amount').value); 
} 

function decryptClickHandler() { 
    document.getElementById('inputText').value = decrypt(document.getElementById('inputText').value, document.getElementById('amount').value); 
} 

Antwort

1

Der Wert eines Eingabefeldes ist immer ein String.

Wenn Sie (c - 97 - amount) % 26 berechnen, erhalten Sie die folgenden Ergebnisse:

c = 97, amount = 1 => (97 - 97 + 1) % 26 = (0 + 1) % 26 = 1 % 26 = 1 
c = 98, amount = 1 => (98 - 97 + 1) % 26 = (1 + 1) % 26 = 2 % 26 = 2 
c = 97, amount = '1' => (97 - 97 + '1') % 26 = (0 + '1') % 26 = '01' % 26 = 1 
c = 98, amount = '1' => (98 - 97 + '1') % 26 = (1 + '1') % 26 = '11' % 26 = 11 

Um dies zu beheben, konvertieren Sie den Wert auf eine ganze Zahl:

var amount = parseInt(document.getElementById('amountDropdown').value, 10); 
Verwandte Themen