Чтобы получить нарциссическое число / число Армстронга, вам нужно взять длину числа в виде строки, как n
для получения степени суммирования значения.
Просто личное слово, из-за спецификации, я бы взял Math.floor
, потому что у вас уже есть номер, вместо parseInt
.
function armst(x) {
var value = parseInt(x, 10),
rest = value,
digit,
sum = 0,
n = x.toString().length; // add toString, if a number is entered
while (rest) {
digit = rest % 10;
rest = Math.floor(rest / 10);
sum += Math.pow(digit, n); // use it here
}
return sum === value
? "Armstrong"
: "Not Armstrong";
}
var num = prompt("Enter a number to check Armstrong"), // try with 54748
output = armst(num);
console.log("Result is: ", output);
Конечно. Все, что вам нужно сделать, это перехватить обмен ключами. Затем вы можете передать свой собственный (поддельный) ключ на другой конец. Вы перехватываете сообщения с помощью ключа, полученного обманным путем, повторно шифруете своим поддельным ключом и передаете на другой конец.
Поскольку атака MIM может произойти во время обмена ключами, вы можете делать то же, что и SSL / TLS.
SSL / TLS использует RSA при обмене ключами, поэтому обмен симметричным ключом [сильно] защищен с помощью RSA.
Уловка состоит в том, чтобы в первую очередь согласовать симметричный ключ. Атаки типа "злоумышленник посередине" обычно происходят на этапе обмена ключами (заставляя вас согласовывать ключ с посредником, а не с вашим настоящим партнером).
Обычно происходит (в сеансах SSL веб-браузеров): что вы используете асимметричную криптографию для обмена симметричным ключом. Однако это зависит от того, действительно ли открытый ключ вашего партнера принадлежит тому, кому, по вашему мнению, он принадлежит. Обычно для этого используются слова Verisign или (какой-либо другой CA).
В какой-то момент должен произойти безопасный и аутентифицированный обмен ключами.
Вышеупомянутые ответы, конечно, верны, но вы должны отметить, что существует несколько эффективных, криптографически безопасных методов для безопасного обмена ключами . Я думаю, что вау использует SRP6 .
Yup. Even if you use symmetric key you have to use authentication/integrity checks. Using symmetric key encryption without authentication/integrity checks makes you susceptible to various forms of replay attacks or substitution attacks. An attacker can modify your ciphertexts and may even know what the effect of his changes are.