@frezerto

Как зашифровать якорь в URL на JS?

Мне необходимо шифровать якорь в URL на JS, а потом расшифровать используя специальный ключ.
Пример: example.com/#youtext
Примерно как должно быть: example.com/#eW91dGV4dA
  • Вопрос задан
  • 306 просмотров
Пригласить эксперта
Ответы на вопрос 2
xEpozZ
@xEpozZ
Веб-разработчик
alert(window.location.hash);
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно примитивно XOR'ить «секретный» пароль и строку. Очень ненадёжно, как и вся затея с хранением ключа шифрования в клиентском скрипте. Тем не менее, вот пример. При смене хэша он заменяется на шифрованную строку. начинающуюся с восклицательного знака - отличительный признак. Если так же вставить хэш с воскл. знаком - он дешифруется и заменится исходной строкой:
((w) => {

  function superpooper(secret) {
    const pass = encodeURIComponent(secret);
    return function onHashChange(){
      var hash = w.location.hash.replace(/^#/,"");
      if (!hash.length) return;
      
      const xor = s => s.split('').map((c,i)=>String.fromCharCode(c.charCodeAt(0)^pass.charCodeAt(i%pass.length))).join('');
  
      if (hash[0]==='!') {
        hash = hash.substring(1);
        const decoded = decodeURIComponent(xor(atob(hash)));
        history.replaceState(null, null, document.location.pathname + '#' + decoded);
      } else {
        const encoded = btoa(xor(encodeURIComponent(hash)));
        history.replaceState(null, null, document.location.pathname + '#!' + encoded);
      }
    }
  }

  w.addEventListener("hashchange", superpooper("abrakadabra"), false);
  
})(window)


Если запустить через консоль и в текущей вкладке добавить, например, хэш
#Моё секретное сообщение оно тут же заменяется на
!RFBHJVtEVlRbMURTVzZRTlNRIydXU1QmQ0RZVF1QR0BUU1JXU14lVURQR1lQR0BUL1FBU1cwVERQRyVbRFZUIDNEU1c2UE5TUVlSV1NUJkJEWVQmVEdAVCVTV1NeWVZEUEclUUdAVCklQVNXNlFEUEcjLkRWVCZCRFNXMFROU1FTUldTVCZDRFlUXFBHQFQlUldTXiMhRFBHJVFHQFQpJEFTVzZRRFBHI1pEVlQmQ0RTV0pYTlNRJVJXU1QgR0RZVCBRR0BUIyZXU14lVERQRyNZR0BUL1FBU1cwVA==

И наоборот, если в странице добавить этот длинный хэш, он заменится на «Моё секретное вот это вот всё».
Ключ шифрования тут abrakadabra
Увеличение длины получается из-за того, что прогоняю через encodeURIComponent(), чтобы нормально работало с кириллицей, смайликами и emoji.

Исходный пример это простой binhex
у вас похоже на binhex: btoa('youtext') // "eW91dGV4dA==" – тут никаких ключей не требуется.

atob("eW91dGV4dA==") // "youtext"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы