Encriptación con clave simétrica con Javascript

El siguiente artículo presenta dos maneras de realizar una encriptación con clave simétrica con Javascript. El primero es a través de la librería de crypto-js, la segunda, manualmente a través de la operación XOR.

  1. Cripto-js
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
    <title>Encriptación</title>
</head>

<body>
    <h1>Encriptación simétrica con CRYPTO-JS</h1>

    Clave: <input type="text" id="key"></input><br><br>
    <label>Texto:</label><br>
    <textarea id="tClaro" rows="4" cols="50"></textarea>
    <br><br>
    <label>Encriptado:</label><br>
    <textarea id="tEncrip" rows="4" cols="50"></textarea>
    <br><br>
    <button onclick="encriptar()">Encriptar</button>
    <button onclick="desencriptar()">Desencriptar</button>

    <p id="array"></p>

    <p id="resultado"></p>

    <script>
        function encriptar() {
            var txtClave = document.getElementById("key").value;
            var txtClaro = document.getElementById("tClaro").value;
            var txtEncriptado = CryptoJS.AES.encrypt(txtClaro, txtClave);
            document.getElementById("tEncrip").value = txtEncriptado;
        }

        function desencriptar() {
            var txtClave = document.getElementById("key").value;
            var txtEncriptado = document.getElementById("tEncrip").value;
            var txtDesencrip = CryptoJS.AES.decrypt(txtEncriptado, txtClave).toString(CryptoJS.enc.Utf8);
            document.getElementById("tClaro").value = txtDesencrip;
        }

    </script>
</body>
</html>

2. Encriptación simétrica manual con XOR

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Encriptado/Desencriptador Xor en Javascript</title>
    <script language="Javascript" type="text/javascript">
        // ---------------------------------------------------------------------------------------------------------------------------------------------------
        /*
        * var txtEncriptado = EncDesenc('txt', 'Clave');
        * var txtDescencriptado = EncDesenc('%049%22%2C%22%25*%27', 'Clave');
        * Operación XOR  (Si son iguales el resultado es 0, si son diferentes el resultado es 1)
        * 0 XOR 0 = 0; 0 XOR 1 = 1; 1 XOR 0 = 1; 1 XOR 1 = 0
        */
        function EncDesenc(pstxt, psClave)
        {
            pstxt = unescape(pstxt);
            var sDesti = '';
            var ltxt = pstxt.length;
            var lClave = psClave.length;
            

            for (var itxt=0; itxt<ltxt; itxt++)
            {
                var ctxt = pstxt.charCodeAt(itxt);
                var cClave = psClave.charCodeAt(itxt % lClave);
                var cDestination = ctxt ^ cClave;
                sDesti += String.fromCharCode(cDestination);
            }
            return(escape(sDesti));
        }

    </script>
</head>
<body>
    <body>
        <table>
            <tr>
                <td><b>Texto en claro: </b><br/><textarea id="txtOriginal" cols="80" rows="4"></textarea></td>
            </tr>
            <tr>
                <td><b>Clave: </b><br/><input id="txtClave" id="key"></input>
            </tr>
            <tr>
                <td><b>Texto encriptado: </b><br/><textarea id="txtResult" cols="80" rows="4"></textarea></td>
            </tr>
            <tr>
                <td><button onclick="encr()">Encriptación</button>
                <button onclick="desencr()">Desencriptación</button></td>
            </tr>
        </table>
        
        <script>
            function desencr(){
                var tClave=document.getElementById("txtClave").value;
                var tResult=document.getElementById("txtResult").value;
                var res=EncDesenc(tResult,tClave);
                var res=res.replace(/%20/g," ");
                var res=res.replace(/%F1/g,"ñ");
                var res=res.replace(/%D1/g,"Ñ");
                var res=res.replace(/%E1/g,"á");
                var res=res.replace(/%E9/g,"é");
                var res=res.replace(/%ED/g,"í");
                var res=res.replace(/%F3/g,"ó");
                var res=res.replace(/%FA/g,"ú");
                var res=res.replace(/%C1/g,"Á");
                var res=res.replace(/%C9/g,"É");
                var res=res.replace(/%CD/g,"Í");
                var res=res.replace(/%D3/g,"Ó");
                var res=res.replace(/%DA/g,"Ú");
                document.getElementById("txtOriginal").value=res;
            }

            function encr(){
                var tClave=document.getElementById("txtClave").value;
                var tOrigen=document.getElementById("txtOriginal").value;
                document.getElementById("txtResult").value=EncDesenc(tOrigen,tClave);
                
}

        </script>
</body>
</html>
<html>

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *