Несколько методов шифрования, обычно используемых во внешнем интерфейсе

внешний интерфейс JavaScript
Несколько методов шифрования, обычно используемых во внешнем интерфейсе

Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.

В настоящее время шифрование в основном используется во фронтенд-разработке, и наиболее распространенным является шифрование паролей для входа в систему. Далее мы познакомим вас с несколькими методами шифрования.

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;
      }
    };

Нравится и поддержите, оставьте в руке стойкий аромат, и будьте почитаемы, шевелите своими ручонками, чтобы заработать состояние, спасибо, что оставили свои следы.

11.png

Прекрасная рекомендация в прошлом

Холст Восхождение на Пит-Роуд [Методы]

Не разбираетесь в сео-оптимизации? Статья, которая поможет вам понять, как сделать SEO-оптимизацию

Холщовая дорога для скалолазания [Свойства]

[Практическая глава] Руководство по разработке мини-программы WeChat и практика оптимизации

Поговорим о мобильной адаптации

Практика оптимизации производительности интерфейса

Разговор о раздражающих регулярных выражениях

Получите адрес потока большого двоичного объекта файла для реализации функции загрузки.

Не понимаете виртуальный DOM Vue? Эта статья поможет вам полностью получить виртуальный DOM

Рекомендации, связанные с Git

Простое введение в Git

git реализует автоматическое нажатие

Как я использую git на работе

Рекомендации, связанные с интервью

Front-end Swastika — Основы

Внешний вид 4D-зоны — расширенный

Для получения дополнительной информации см.:Домашняя страница