Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
В настоящее время шифрование в основном используется во фронтенд-разработке, и наиболее распространенным является шифрование паролей для входа в систему. Далее мы познакомим вас с несколькими методами шифрования.
1. md5-шифрование
Существует два типа битов после шифрования MD5: 16 бит и 32 бита. 32-битная версия используется по умолчанию. (16 бит фактически берутся с 9-го по 24-й бит в середине 32-битной строки) для повышения безопасности. Смещения могут быть добавлены к md5 в соответствии с требованиями бизнеса. Например, строка из указанных цифр соединяется с исходным символом.
1.1 Как использовать
npm install --save js-md5
// 然后在页面中 引入
import md5 from 'js-md5';
md5('holle') // bcecb35d0a12baad472fbe0392bcc043
расширять
алгоритм поддержки md5
md5.hex(''); // d41d8cd98f00b204e9800998ecf8427e
md5.array(''); // [212, 29, 140, 217, 143, 0, 178, 4, 233, 128, 9, 152, 236, 248, 66, 126]
md5.digest(''); // [212, 29, 140, 217, 143, 0, 178, 4, 233, 128, 9, 152, 236, 248, 66, 126]
md5.arrayBuffer(''); // ArrayBuffer
md5.buffer(''); // ArrayBuffer, deprecated, This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
md5.base64('');
2. шифрование base64
2.1 Как использовать
npm install --save js-base64
// 引入
let Base64 = require('js-base64').Base64
// 加密
Base64.encode('测试'); // 5bCP6aO85by+
Base64.encodeURI('测试'); // 5bCP6aO85by-
// 解密
Base64.decode('5bCP6aO85by+'); // 测试
// note .decodeURI() is unnecessary since it accepts both flavors
Base64.decode('5bCP6aO85by-'); // 测试
3.res шифрование
Внешняя js-библиотека: адрес jsencrypt.js на github:GitHub.com/Трэвис Т/Роль…
Справочная информация: внешние данные шифруются и передаются на серверную часть, а внутренняя часть расшифровывается для обработки данных. В процессе разработки проекта, для обеспечения безопасности данных, в процессе передачи данных на front-end и back-end данные необходимо шифровать и расшифровывать.
Более безопасным и популярным методом шифрования является асимметричное шифрование (RSA). Для его метода шифрования требуются два ключа: закрытый ключ (закрытый ключ) и открытый ключ (открытый ключ). Шифрование с открытым ключом, дешифрование с закрытым ключом.
Правила шифрования RSA
Шифрование с открытым ключом (publicKey), дешифрование с закрытым ключом (privateKey). Его нельзя отменить, закрытый ключ (privateKey) шифруется, а открытый ключ (publicKey) расшифровывается. Проще говоря, передняя и задняя части должны быть зашифрованы с помощью открытого ключа (publicKey) и расшифрованы с помощью закрытого ключа (privateKey).
Почему это необратимо?? Интерфейсный код известен своей плохой безопасностью. Причина, по которой он называется закрытым ключом, заключается в том, что он является закрытым и не может быть обнародован, и необходимо обеспечить безопасность ключа. Если внешний закрытый ключ (privateKey) зашифрован, это означает, что закрытый ключ необходимо хранить во внешнем интерфейсе, что небезопасно и противоречит первоначальному намерению обеспечить безопасность данных.
Двустороннее шифрование и дешифрование RSA
В процессе разработки мы столкнулись с такой проблемой: фронтенду нужно не только передать зашифрованные данные на бэкенд, но и расшифровать зашифрованные данные, отправленные обратно с бэкенда. Поэтому определены два метода для шифрования и расшифровки данных.
Представьте внешнюю JS-библиотеку: jsencrypt.js.
// RSA 解密
static decryptRSA(str: string) {
const encryptor = new JSEncrypt() // 新建JSEncrypt对象
const privateKey = "XXXX" // 私钥串
encryptor.setPrivateKey(privateKey)//设置私钥
const decrytStr = encryptor.decrypt(str)
return decrytStr
}
// RSA 加密
static encryptRSA(str: string) {
const encryptor = new JSEncrypt() // 新建JSEncrypt对象
const publicKey = ''; //公钥串
encryptor.setPublicKey(publicKey) // 设置公钥
const rsaPassWord = encryptor.encrypt(str)
return rsaPassWord
}
Я считаю, что все нашли проблему. Мы поместили весь закрытый ключ (privateKey) и открытый ключ (publicKey) во внешний код. Безопасность внешнего интерфейса плохая, и пару ключей можно легко получить. Шифрование RSA и расшифровка тоже теряет ценность. Итак, как решить эту проблему?
Посредством связи между интерфейсом и сервером мы используем двустороннее шифрование и дешифрование, которое заключается в использовании двух наборов секретных ключей для решения этой проблемы. Что такое двустороннее шифрование?
Серверная часть определяет две пары ключей: пару ключей A и пару ключей B.
пара ключей | открытый ключ | закрытый ключ |
---|---|---|
A | publicKeyA | privateKeyA |
B | publicKeyB | privateKeyB |
Серверная часть содержит: закрытый ключ A (privateKeyA), открытый ключ B (publicKeyB), а передняя часть содержит: открытый ключ A (publicKeyA), закрытый ключ B (privateKeyB).
-
Пара ключей A -- внешнее шифрование, внутреннее дешифрование
Передний конец использует открытый ключ A (publicA) для шифрования данных, а задний конец использует закрытый ключ A (privateKeyA), соответствующий открытому ключу A (publicKeyA), для расшифровки.
-
Пара ключей B -- внешнее дешифрование, внутреннее шифрование
Задняя часть использует открытый ключ B (publickeyb) для шифрования, а передняя часть расшифровывает закрытый ключ A (privatekeyb), соответствующий открытому ключу B (PUBLICKEYB).
Это гарантирует, что хотя и закрытый ключ (privateKeyB), и открытый ключ (publicKeyA) находятся во внешнем коде, они не являются парой, и даже если они будут получены, их нельзя будет успешно расшифровать. Он также соответствует правилам шифрования с открытым ключом (publicKey) и дешифрования с закрытым ключом (privateKey). Идеальное решение!
Вопросы, требующие внимания Самая длинная строка, зашифрованная этим плагином для разрешения, составляет 117 символов.
Иногда при шифровании вы можете столкнуться с тем, что параметры шифрования слишком длинные и не могут быть зашифрованы.Добавьте следующий код в исходный код и переопределите функцию шифрования, вызвав метод encryptLong.
JSEncrypt.prototype.encryptLong = function(string) {
var k = this.getKey();
// var maxLength = (((k.n.bitLength()+7)>>3)-11);
var maxLength = 117;
try {
var lt = "";
var ct = "";
if (string.length > maxLength) {
lt = string.match(/.{1,117}/g);
lt.forEach(function(entry) {
var t1 = k.encrypt(entry);
ct += t1 ;
});
return hex2b64(ct);
}
var t = k.encrypt(string);
var y = hex2b64(t);
return y;
}
catch (ex) {
return false;
}
};
Нравится и поддержите, оставьте в руке стойкий аромат, и будьте почитаемы, шевелите своими ручонками, чтобы заработать состояние, спасибо, что оставили свои следы.
Прекрасная рекомендация в прошлом
Холст Восхождение на Пит-Роуд [Методы]
Не разбираетесь в сео-оптимизации? Статья, которая поможет вам понять, как сделать SEO-оптимизацию
Холщовая дорога для скалолазания [Свойства]
[Практическая глава] Руководство по разработке мини-программы WeChat и практика оптимизации
Поговорим о мобильной адаптации
Практика оптимизации производительности интерфейса
Разговор о раздражающих регулярных выражениях
Получите адрес потока большого двоичного объекта файла для реализации функции загрузки.
Не понимаете виртуальный DOM Vue? Эта статья поможет вам полностью получить виртуальный DOM
Рекомендации, связанные с Git
git реализует автоматическое нажатие
Рекомендации, связанные с интервью
Внешний вид 4D-зоны — расширенный
Для получения дополнительной информации см.:Домашняя страница