Я хочу сделать пользовательское шифрование с помощью JavaScript, но я застрял в функции расшифровки - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу создать новый пользовательский механизм шифрования с использованием JavaScript, но у меня возникла проблема при создании функции расшифровки.В моей функции расшифровки я не понимаю, как переключить 3 символа на 1 символ.В разделе функции расшифровки 3 символа из ящика, который мне не нужен, заменяются возвращаемыми символами.

Если вам нужен мой полный код, я могу поделиться здесь.

ИтакПожалуйста, помогите мне решить эту проблему.Извините за мой плохой английский:)

<body>
	<h3>Encrypt and Decrypt</h3>
	<!-- Encrypt -->
<!-- 	<input placeholder="Ketikan sesuatu disini, pasti bisa:v" id="input"><br>
	<button onclick="encrypt()">Encrypt</button> -->
	<!-- Decrypt -->
	<br><input placeholder="Ketikan sesuatu disini, pasti bisa:v" id="input2"><br>
	<button onclick="decrypt()">Decrypt</button>
	<!-- Result -->
	<div id="result"></div>
	<!-- Enginenya -->
	<script>
		function encrypt(){
			var rawtext = document.getElementById("input").value;
			var temptext = "";
			for(i = 0; i < rawtext.length; i++){
				temptext += enc(rawtext[i]);
			}
			document.getElementById("result").innerHTML = temptext;
		}
		function decrypt(){
			var rawtext = document.getElementById("input2").value;
			var temptext = "";
			for(i = 0; i < rawtext.length; i++){
				temptext += dec(rawtext[i]);
			}
			document.getElementById("result").innerHTML = temptext;
		}
		function enc(x){
			switch(x){
				case " " :
				return " ";
				break;

				case "A" :
				return "+/=";
				break;

				case "B" :
				return "36=";
				break;
			}
		}
		function dec(x){
			switch(x){
				case "+/=" :
				return "A";
				break;

				case "36=" :
				return "B";
				break;
			}
		}
	</script>
</body>

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Вы перебираете символы в единственном числе и передаете их в dec(), например.Если вы введете «+ / =», вы на самом деле звоните dec('+'), затем dec('/'), а затем dec('=')

. При расшифровке введенного значения вам придется разделить их на группы по 3 и затем передатьте.

function decrypt(){
    var rawtext = document.getElementById("input2").value;
    var temptext = "";

    for(i = 0, charsLength = rawtext.length; i < charsLength; i += 3){
        temptext += dec(rawtext.substring(i, i + 3));
    }

    document.getElementById("result").innerHTML = temptext;
}
0 голосов
/ 28 февраля 2019

Похоже, вы перебираете текст, чтобы расшифровать символ за символом, но тогда ваша функция dec ожидает три символа.Этого никогда не происходит, поэтому dec() возвращает неопределенное значение.

Пример:

decrypt("36=") -> 
    dec("3") + dec("6") + dec("=") ->
    undefined + undefined + undefined
    undefinedundefinedundefined

Вы должны изменить функцию расшифровки, чтобы избежать этого.Кроме того, некоторые указатели:

  • Вы не инициализируете i в своей функции шифрования / дешифрования
  • Нет необходимости в break; после return в вашем случаеоператоры в качестве возврата завершат выполнение.

Редактировать: Вот пример с картой, так как некоторые другие ответы имели некоторые с циклами for.А также потому, что я подозревал, что это можно сделать одной строкой (и я был прав!)

<body>
	<h3>Encrypt and Decrypt</h3>
	<br><input placeholder="Ketikan sesuatu disini, pasti bisa:v" id="input2"><br>
	<button onclick="decrypt()">Decrypt</button>
	<div id="result"></div>
	<script>
		function decrypt(){
			document.getElementById("result").innerHTML = document.getElementById("input2").value.match(/.{1,3}/g).map(dec).join('');
		}
		function dec(x){
			switch(x){
				case "+/=" :
				  return "A";
				case "36=" :
				  return "B";
                default:
                  return "?";
			}
		}
	</script>
</body>
0 голосов
/ 28 февраля 2019

Вы можете взять три символа для расшифровки зашифрованной строки.

while (i < rawtext.length) {
    temptext += dec(rawtext.slice(i, i += 3)); // take from index i and increment i by 3
}

function encrypt() {
    var rawtext = document.getElementById("input").value,
        temptext = "",
        i;
    for (i = 0; i < rawtext.length; i++) {
        temptext += enc(rawtext[i]);
    }
    document.getElementById("result").innerHTML = temptext;
}

function decrypt() {
    var rawtext = document.getElementById("input2").value,
        temptext = "",
        i = 0;
    while (i < rawtext.length) {
        temptext += dec(rawtext.slice(i, i += 3));
    }
    document.getElementById("result").innerHTML = temptext;
}

function enc(x) {
    switch (x) {
        case " ":
            return " ";
        case "A":
            return "+/=";
        case "B":
            return "36=";
    }
}

function dec(x) {
    switch (x) {
        case "+/=":
            return "A";
        case "36=":
            return "B";
    }
}
<h3>Encrypt and Decrypt</h3>
<input placeholder="Ketikan sesuatu disini, pasti bisa:v" id="input"><br>
<button onclick="encrypt()">Encrypt</button>
<!-- Decrypt -->
<br><input placeholder="Ketikan sesuatu disini, pasti bisa:v" id="input2"><br>
<button onclick="decrypt()">Decrypt</button>
<!-- Result -->
<div id="result"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...