Это более чистый способ, и он будет легче поддерживать методы кодирования и декодирования. Мы храним символы в массиве, где позиция это код. Позволяет использовать для отображения в обоих направлениях.
// 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", "~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", ">", "<", "-", "_", "+", "=", "{", "", "[", "]", "|", ",", ".", "?", "/", "'", '"', "", ";", " "];
// Function to take a string and encode it using a simple map.
const encodeData = (data, lex) => data.split('').map(c => lex.indexOf(c) + 1);
// Decode does the reverse
const decodeData = (data, lex) => data.map(d => lex[d]);
var encryption = [];
var cvalue = 0;
var code = prompt("Type In Encryption Password [Beta Encryptor]");
alert(encodeData(code, lexicon));
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");
}
document.getElementById('runEncryption').innerHTML = encryption.join();
alert(encryption); //If this was in the loop, it won't work
}
<html>
<input type="text" id="input">
<button onclick="runner();">Add Text to Encrypt</button>
<br>
<div id="runEncryption"></div>
</html>
Здесь используется оператор переключения (лучше подходит для этого типа теста.)
[ 116]
var encryption = [];
var cvalue = 0;
var code = prompt("Type In Encryption Password [Beta Encryptor]");
var codeLength = code.length * 100;
for (var j = 0; j < code.length; j++) {
switch (code[j]) {
case "0":
value = 0;
break;
case "1":
value = 1;
break;
case "2":
value = 2;
break;
case "3":
value = 3;
break;
case "4":
value = 4;
break;
case "5":
value = 5;
break;
case "6":
value = 6;
break;
case "7":
value = 7;
break;
case "8":
value = 8;
break;
case "9":
value = 9;
break;
case "A":
value = 10;
break;
case "B":
value = 11;
break;
case "C":
value = 12;
break;
case "D":
value = 13;
break;
case "E":
value = 14;
break;
case "F":
value = 15;
break;
case "G":
value = 16;
break;
case "H":
value = 17;
break;
case "I":
value = 18;
break;
case "J":
value = 19;
break;
case "K":
value = 20;
break;
case "L":
value = 21;
break;
case "M":
value = 22;
break;
case "N":
value = 23;
break;
case "O":
value = 24;
break;
case "P":
value = 25;
break;
case "Q":
value = 26;
break;
case "R":
value = 27;
break;
case "S":
value = 28;
break;
case "T":
value = 29;
break;
case "U":
value = 30;
break;
case "V":
value = 31;
break;
case "W":
value = 32;
break;
case "X":
value = 33;
break;
case "Y":
value = 34;
break;
case "Z":
value = 35;
break;
case "a":
value = 36;
break;
case "b":
value = 37;
break;
case "c":
value = 38;
break;
case "d":
value = 39;
break;
case "e":
value = 40;
break;
case "f":
value = 41;
break;
case "g":
value = 42;
break;
case "h":
value = 43;
break;
case "i":
value = 44;
break;
case "j":
value = 45;
break;
case "k":
value = 46;
break;
case "l":
value = 47;
break;
case "m":
value = 48;
break;
case "n":
value = 49;
break;
case "o":
value = 50;
break;
case "p":
value = 51;
break;
case "q":
value = 52;
break;
case "r":
value = 53;
break;
case "s":
value = 54;
break;
case "t":
value = 55;
break;
case "u":
value = 56;
break;
case "v":
value = 57;
break;
case "w":
value = 58;
break;
case "x":
value = 59;
break;
case "y":
value = 60;
break;
case "z":
value = 61;
break;
case "~":
value = 62;
break;
case "`":
value = 63;
break;
case "!":
value = 64;
break;
case "@":
value = 65;
break;
case "#":
value = 66;
break;
case "$":
value = 67;
break;
case "%":
value = 68;
break;
case "^":
value = 69;
break;
case "&":
value = 70;
break;
case "*":
value = 71;
break;
case "(":
value = 72;
break;
case ")":
value = 73;
break;
case ">":
value = 74;
break;
case "<":
value = 75;
break;
case "-":
value = 76;
break;
case "_":
value = 77;
break;
case "+":
value = 78;
break;
case "=":
value = 79;
break;
case "{":
value = 80;
break;
case "":
value = 81;
break;
case "[":
value = 82;
break;
case "]":
value = 83;
break;
case "|":
value = 84;
break;
case ",":
value = 85;
break;
case ".":
value = 86;
break;
case "?":
value = 87;
break;
case "/":
value = 88;
break;
case "'":
value = 89;
break;
case '"':
value = 90;
break;
case ":":
value = 91;
break;
case ";":
value = 92;
break;
case " ":
value = 93;
break;
value = 93;
}
encryption.push(value);
}
if (encryption.length % 2 === 1) {
encryption.push(93);
alert("The Key was Edited Because The Key needs to be even");
}
document.write(encryption);
function runner () {
var entext = [];
var p = 0;
var abc = document.getElementById('input');
var ab = abc.length;
while (p <= ab) {
entext.push(document.getElementById('input').value[p]);
document.getElementById('runEncryption').innerHTML = entext[p];
p++;
}
alert(ab); //If this was in the loop, it won't work
}
<html>
<input type="text" id="input">
<button onclick="runner();">Add Text to Encrypt</button>
<br>
<div id="runEncryption"></div>
</html>
125 Khz ( низкочастотный ) теги являются write-once/read-many, и обычно только содержите маленькое ( постоянный ) уникальный идентификационный номер.
13,56 Mhz ( высокочастотный ) теги обычно являются чтением-записью, они могут обычно хранить приблизительно 1 - 2 kilbytes данных в дополнение к их предварительной установке ( постоянный ) число уникального идентификатора.
860-960 Mhz ( ультравысокая частота ) теги обычно являются чтением-записью и могут иметь намного большую мощность хранения информации (я думаю, что 64 КБ являются самым высоким в настоящее время доступным для пассивных тегов) в дополнение к их предварительной установке ( постоянный ) число уникального идентификатора.
Большинство тегов чтения-записи может быть заблокировано для предотвращения далее записи в определенные блоки данных во внутренней памяти тега при оставлении других блоков разблокированными. Различные производители тега делают свои теги по-другому, все же.
В зависимости от Вашего применения по назначению, Вам, возможно, придется программировать Ваш собственный микроконтроллер для взаимодействия через интерфейс со встроенным модулем чтения-записи RFID с помощью определенного для производителя протокола. Это, конечно, намного более дешево, чем покупка полной единицы чтения-записи RFID, поскольку они могут стоить несколько тысяч долларов. С настраиваемым решением можно создать Вас собственная единица, которая делает конкретно, что Вы хотите всего за 200$.
SkyTek - компания-производитель RFID-считывателя (можно купить их продукты через сторонних ритейлеров & оптовые торговцы как Мышелов )
Робототехника Trossen - можно купить теги RFID и читателей (125 Khz & 13.56 Mhz) отсюда, среди прочего
Я сделал некоторую разработку с Классиком Mifare (ISO 14443A) карты приблизительно 7-8 лет назад. Можно читать и записать во все секторы карты, IIRC, единственные данные, которые Вы не можете изменить, являются порядковым номером. Тогда мы пользовались собственной библиотекой от Philips Semiconductors. Интерфейс команды к карте был довольно подобен ISO 7816-4 (используемый со стандартными Смарт-картами).
я повторно прокомментировал бы, что Вы смотрите платформа OpenPCD , если Вы в разработку.
Это также из интереса относительно криптографических функций в приблизительно карты RFID.
Некоторые RFID-чипы являются чтением-записью, большинство только для чтения. Можно узнать, только ли микросхема для чтения путем проверки таблицы данных.
Это зависит от типа используемой вами микросхемы, но в наши дни большинство чипов вы можете написать. Это также зависит от того, сколько энергии вы даете вашему RFID-устройству. Чтобы читать, вам не нужно много силы и очень мало прямой видимости. Для того, чтобы вы правы, вам нужны полная проницательность и более глубокая проницательность