Как исправить формулу расшифровки, чтобы сделать целое число [Требуется помощь] - PullRequest
0 голосов
/ 30 января 2019

Я имею в виду, что мой код работает в определенной степени.Формула верна, пока не достигнет определенного уровня шифрования [чем больше комбинация с ключом шифрования]

<html>
<script>// Simple array of chars where their index is the 'code'



let lexicon = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", ">", "<", "-", "_", "+", "=", "{", "\\", "[", "]", "|", ",", ".", "?", "/", "'", '"', "", ";", " "];


//decryptor proof
//var y = 26; var a = 1; var b = 1; var c = 4; var d = 6;
//var x = ((a*y)+(c*a)-(d*a))/(1+(b*a)+(2*a)); console.log(x);
//for 12 bit code, hi = 


// Function to take a string and encode it using a simple map.
const encodeData = (data, lex) => data.split('').map(c => lex.indexOf(c) + 0);
// Decode does the reverse
const decodeData = (data, lex) => data.map(d => lex[d]);
// For making conversion constant "hi" correct
const roundHi = (y, x) => Math.round(y/x);



var pointValue = [];
var toVector = 0;
var toNoVector = 0;
var vector = [];
var noVector = [];
var encryption = [];
var decryption = [];
var cvalue = 0;
var dvalue = 0;
var evalue = 0;
var hi = 0;
var a = 0;
var b = 0;
var c = 0;
var d = 0;
var x = 0;
var n = 0;
var aa = 0;
var bb = 0;
var cc = 0;
var dd = 0;
var bool1 = 0;
var bool2 = 0;





















var code = prompt("Type In Encryption Password [Beta Encryptor]");
//testing while loop!
while (bool1 + bool2 < 2) {
    if (code.length === 0) {
        code = prompt("Type in Password more than 0 Characters Long");
    }
    else {
        bool1 = 1;
    }

    
    
    if (code.length % 4 != 0) {
         code = prompt("Type in Password Length That is Perfectly divisible by 4");
    }
    else {
        bool2 = 1;
    }
    
    
    
}
//tested while loop!
code = encodeData(code, lexicon);
for (var j = 0; j < code.length; j+=4) {
    a += code[j];
}

for (var j = 1; j < code.length; j+=4) {
    b += code[j];
}

for (var j = 2; j < code.length; j+=4) {
    c += code[j];
}

for (var j = 3; j < code.length; j+=4) {
    d += code[j];
}

n = code.length / 4;
aa = a / n;
bb = b / n;
cc = c / n;
dd = d / n;


 
 
//document.write('<div id="key" style="background-color: lightblue; display: table;">' + code + '</div>');
//document.write(code);
document.write('<div id="key" style="background-color: lightblue; display: table;">' + code);


















    function a () {
        var a = vector.join('.');
        var aa = vector.join('');
        var b = a.split('.')
        
        
        
        
        function b () {
            for (var t = 0; t < aa.length; t++) {
                if (aa[t] === ".") {
                    pointValue.push(".");
                }
                
                if (aa[t] === ",") {
                    pointValue.push(",");
                }
            
            }
        }
        b();
        
        
        
        
        
        
    }

















function runner() {
    var abc = document.getElementById('input').value;
    encryption = encodeData(abc, lexicon);
    if (encryption.length % 2 === 1) {
        encryption.push(93);
        alert("The Key was Edited Because The Key needs to be even");
    }   
    var a = code.length * 0.5;
    var b = 1;
    var c = 0;

    //makes vector

    function vectorMaker (p) {
        p = 0; 
        for (var k = 0; k < encryption.length; k++) {
            toVector = 0;
            for (var j = 0; j < code.length; j++) {
            
                if (j % 4 === 0) {
                    toVector += encryption[p] / code[j];
                }
        
                else if (j % 4 === 1) {
                    toVector += encryption[p] * code[j];
                }
        
                else if (j % 4 === 2) {
                    toVector += encryption[p] - code[j];
                }
        
                else if (j % 4 === 3) {
                    toVector += encryption[p] + code[j];
                }
            }
            vector.push(toVector);
            p+=1; 
        }
        p = 0;
    }
    vectorMaker();
    
        
    
    document.getElementById('runEncryption').innerHTML = vector;
       
}







    
function runback () {
    
    
    





    function vectorBreaker (e) {
        e = 0; 
        decryption = vector;
         
        
        for (var m = 0; m < vector.length; m++) {
            y = vector[m]
            
            
            decryption[m] = ((aa*y)+n*(cc+aa)-n*(dd+aa))/((n*1)+n*(bb*aa)+((n*2)*aa));
            decryption[m] = Math.round(decryption[m]);
            
            e+=1;
        }
        e = 0;
    }
    vectorBreaker();
    
    
    decryption = decodeData(decryption, lexicon);
    cvalue = decryption.join('');
    document.getElementById('runDecryption').innerHTML = cvalue; 

   
}


//decryptor proof
//var y = 26; var a = 1; var b = 1; var c = 4; var d = 6;
//var x = ((a*y)+(c*a)-(d*a))/(1+(b*a)+(2*a)); console.log(x);









function clearCode () {
    document.getElementById('runDecryption').innerHTML = "";
    document.getElementById('runEncryption').innerHTML = "";
    pointValue = [];
    toVector = 0;
    toNoVector = 0;
    vector = [];
    noVector = [];
    encryption = [];
    decryption = [];
    cvalue = 0;
    dvalue = 0;
    evalue = 0;
    hi = 0;
    a = 0;
    b = 0;
    c = 0;
    d = 0;
    x = 0;
    n = 0;
    aa = 0;
    bb = 0;
    cc = 0;
    dd = 0;
    bool1 = 0;
    bool2 = 0;
}





// cod for tomorrow | var a = vector.join('.'); var b = a.split('.');

</script>








<input type="text" id="input">
<button onclick="runner();">Add Text to Encrypt</button></div>
<br>
<div id="runEncryption" style="background-color: yellow; padding: 30px; display: table; margin: 15px;"></div>

<button onclick="runback();">Decode Text</button>
<br>
<div id="runDecryption" style="background-color: lightgreen; padding: 30px; display: table; margin: 15px;"></div>

<button onclick="clearCode();">Clear Text Boxes</button>
</html>

Моя проблема в функции vectorBreaker (), которая находится в функции runBack (). Как вы видите, у меня есть округлитель прямо под формулой расшифровки.Это связано с тем, что: например, «расшифрованные данные [по крайней мере, числовое место]» будут иметь значение 47, а формула дешифрования будет равна 47.01244423.,Это все еще не дало целое число, даже когда оно делает это для меньших числовых констант;как вы можете видеть на рисунке ниже введите описание изображения здесь

Может кто-нибудь помочь исправить это [сделать так, чтобы формула дешифрования всегда выдавала целые числа]?Заранее спасибо:)

...