我正在为一个大学项目开发一个带有JavaScript的Caeser密码加密器,并且到目前为止已经设法让它正常工作。
唯一的问题是,我需要在加密后保留标点符号(!,?等)并且我遇到了困难。这是我目前的代码:
function encryptor() {
var alphabet = "abcdefghijklmnopqrstuvwxyz";
var letter = "";
var encWord = "";
var userInput = document.getElementById("message").value;
var key = parseInt(window.prompt("Enter a key:"));
for (i = 0; i < userInput.length; i++) {
letter = userInput[i];
var shift = alphabet.indexOf(letter);
if (letter.match("/[^A-Za-z0-9_]/")) {
continue;
} else if (shift < 23) {
var encLetter = alphabet[shift + key];
} else {
var encLetter = alphabet[shift - (26 - key)];
}
encWord += encLetter;
}
document.getElementById("encWord").innerHTML = encWord;
}
有人可以请我指出正确的方向吗?
感谢。
答案 0 :(得分:3)
在continue
之前,您应将letter
添加到encWord
if (letter.match(/[^A-Za-z0-9_]/)) {
encWord += letter;
continue;
}
否则它会跳过它。
答案 1 :(得分:0)
对于keepint标点符号,你可以检查,如果字符在字母字符串中,如果没有,则使用该项的标点符号。
function encryptor() {
var alphabet = "abcdefghijklmnopqrstuvwxyz",
letter,
encWord = "",
userInput = document.getElementById('message').value,
key = parseInt(window.prompt("Enter a key:")),
shift,
i;
for (i = 0; i < userInput.length; i++) {
letter = userInput[i];
shift = alphabet.indexOf(letter);
if (shift === -1) {
encWord += letter;
continue;
}
encWord += alphabet[(shift + key) % alphabet.length];
}
document.getElementById("encWord").innerHTML = encWord;
}
<input id="message" type="text" onchange="encryptor()"><br>
<div id="encWord"></div>
答案 2 :(得分:0)
最简单的方法是保持一个&#34;字母表&#34;并简单地沿着它移动,使用 for ( auto index = 0U ; index < a.numberOfItems ; ++index)
{
auto id = a.idList[index];
b.listOfStructures[index]
= { id, doesSomeNumberExist(id) ? getRandomInt() : 0 };
}
b.numberOfItems = a.numberOfItems;
来获取每个符号位置。
这是一个实现:
indexOf
&#13;
请注意我是如何忘记&#34;将var caesarCipher = (function() {
var alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"#¤%&/()=?`½§@£$€{[]}|\'*';
return function caesarCipher(message, offset) {
if (offset === void 0) {
offset = 1;
}
return message.replace(/./igm, function(letter) {
if (alphabet.indexOf(letter) >= 0) {
return alphabet[((alphabet.indexOf(letter) + offset) + alphabet.length) % alphabet.length];
}
return letter;
});
};
})();
//TEST
var chipherOffset = 7;
var message = "Hello World.";
caesarCipher(message, chipherOffset);
console.log(caesarCipher(message, chipherOffset));
console.log(caesarCipher(caesarCipher(message, chipherOffset), 0 - chipherOffset));
添加到我的字母表中。这是您在维护自己的字母表时遇到的风险。
另一个解决方案是使用.
和charCodeAt
,只需使用浏览器中已有的内置字母:
String.fromCharCode
&#13;
此解决方案修复了&#34;忘记添加符号&#34;问题,但你冒险得到一些非常奇怪的符号,如&#34; \ n&#34;,这可能真的搞乱了你的字符串!