Обзор внешнего интерфейса js-шифрования
Требования к безопасности системы относительно высоки, поэтому для передачи данных необходимо выбрать протокол https. Конечно, во многих случаях обычные веб-сайты могут использовать протокол http, если требования безопасности не очень высоки. В этом случае передача пароля открытым текстом явно неуместна, поскольку, если запрос будет перехвачен во время передачи, пароль открытого текста может быть напрямую использован для входа на сайт.
HTTPS (443) добавлен на основе HTTP (80),Протокол SSL (уровень защищенных сокетов), SSL использует сертификаты для проверки подлинности сервера и шифрования связи между браузером и сервером. Он шифруется открытым ключом перед передачей и расшифровывается закрытым ключом на стороне сервера.
Для шифрования веб-интерфейса с использованием протокола http,Остерегаться можно только от джентльмена, но не от злодея. Внешний интерфейс полностью открыт, включая ваш алгоритм шифрования. Зная алгоритм шифрования, пароль можно разгадать, это лишь вопрос времени. Чтобы пароль, хранящийся в базе данных, был более безопасным, необходимо использовать различные односторонние (асимметричные) методы шифрования в бэкэнде для зашифрованного хранилища.
Переднее и внутреннее шифрование необходимо расшифровать, поэтому требуется симметричный алгоритм шифрования, то есть внешний интерфейс используетencrypted = encrypt(password+key), серверная часть используетpassword = decrypt(encrypted +key), внешний интерфейс передает только зашифрованную строку, зашифрованную паролем и ключом, поэтому, даже если запрос будет перехвачен, алгоритм шифрования известен, но разгадать открытый текстовый пароль сложно из-за отсутствия ключа. Так что этот ключ очень важен. Этот ключ генерируется и уничтожается внутренним элементом управления, и после использования он становится недействительным, поэтому, даже если вы можете имитировать использование зашифрованного пароля для отправки запроса на имитацию входа в систему, но срок действия ключа истек, обратный -end все еще не может это проверить.
Обратите внимание, что если локальная среда по своей природе небезопасна, а ключ известен, пароль может быть разгадан мгновенно с помощью алгоритма дешифрования. Предполагается только, что передача перехватывается во время процесса. Следовательно, внешнее шифрование не может предотвратить злодеев. Если вы действительно хотите предотвратить это, вы можете сжать и зашифровать js-файл алгоритма шифрования и постоянно обновлять средства, чтобы затруднить получение js-файла и затруднить получение хакерами алгоритма шифрования. Это то, что делает извращенный google, который сам реализует виртуальную машину js и затрудняет получение алгоритма шифрования, постоянно обновляя зашифрованные и запутанные файлы js. Таким образом, хакер не может решить ее, не зная алгоритма шифрования.
Обычно используемые алгоритмы симметричного шифрования:DES, 3DES (TripleDES), AES, RC2, RC4, RC5 и Blowfis.Вы можете обратиться к: Сводная информация о реализации Java для часто используемых алгоритмов шифрованияПроект VUE для внешнего приложения для шифрования и дешифрованияУстановка пакета через npm install
npm install crypto-js --save
Создайте новую общедоступную утилиту js. Создайте здесь новый файл crypto.js, используя шифрование AES.
const CryptoJS = require('crypto-js'); //引用AES源码js
const key = CryptoJS.enc.Utf8.parse("1234123412ABCDEF"); //十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412'); //十六位十六进制数作为密钥偏移量
//加密方法
function Encrypt(word) {
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
}
//解密方法
function Decrypt(word) {
let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
const desKey = CryptoJS.enc.Utf8.parse("11");
//DES加密方法
function desEncrypt(message) {
let encrypted = CryptoJS.DES.encrypt(message, desKey, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
//DES解密方法
function desDecrypt(ciphertext) {
if(ciphertext===""||ciphertext===null||ciphertext===undefined){
return "";
}
if(typeof(ciphertext)!="string"){
ciphertext=ciphertext.toString();
}
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
}, desKey, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
export default {
Encrypt,
Decrypt,
desEncrypt,
desDecrypt
}
Ссылка в файле vue
<template><div>模版</div></template>
import crypto from "@/utils/crypto.js";
export default {
data(){
return {}
},
created() {
/**这里仅仅用于演示**/
console.log(crypto.Encrypt(122)) // 加密
console.log(crypto.Decrypt(crypto.Encrypt(122))) // 解密
}
}
Проект requireJS интерфейсных приложений для шифрования и дешифрования
//这里是require的一个组件 Tripledes是Crpto.js库
define(['jquery','Tripledes'], function ($,Tripledes){
var groupCrypto = {};
var fn={
key:'huakangdashen'//Ĭ秘钥
}
CryptoJS.mode.ECB = (function () {
var ECB = CryptoJS.lib.BlockCipherMode.extend();
ECB.Encryptor = ECB.extend({
processBlock: function (words, offset) {
this._cipher.encryptBlock(words, offset);
}
});
ECB.Decryptor = ECB.extend({
processBlock: function (words, offset) {
this._cipher.decryptBlock(words, offset);
}
});
return ECB;
}());
/**加密方法**/
groupCrypto.encryptByDES=function(message, key) {
/**判断传参类型**/
if(message===""||message===null||message===undefined){
return "";
}
if(typeof(message)!="string"){
message=message.toString();
}
var keyHex = CryptoJS.enc.Utf8.parse(key||fn.key);
var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
/**解密方法**/
groupCrypto.decryptByDES=function(ciphertext, key) {
if(ciphertext===""||ciphertext===null||ciphertext===undefined){
return "";
}
if(typeof(ciphertext)!="string"){
ciphertext=ciphertext.toString();
}
var keyHex = CryptoJS.enc.Utf8.parse(key||fn.key);
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
}, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
return groupCrypto;
});
Вот компонент require Tripledes, это библиотека Crpto.js, вот шифрование DES.Этот код просто примерКлючевое местоположение должно быть спланировано и размещено в соответствии с экземпляром проекта. также можетИнтерфейс запроса генерируется серверной частью, и каждый раз генерируется другой ключ.
После ввода параметров зашифруйте входные параметры.Важные параметры, возвращаемые серверной частью, могут быть зашифрованы и расшифрованы интерфейсной частью.