JavaScript È°¿ëÆÁ
2018.11.06 / 10:38

ÀÚ¹Ù½ºÅ©¸³Æ® RSA ¾Ïȣȭ ¶óÀ̺귯¸® JSEncrypt

hanulbit
Ãßõ ¼ö 194

JSEncrypt´Â ºê¶ó¿ìÀú¿¡¼­ ¼­¹ö·Î º¸³¾ µ¥ÀÌÅ͸¦ ¾Ïȣȭ Çϱâ À§Çؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÚ¹Ù½ºÅ©¸³Æ® ¶óÀ̺귯¸®·Î RSA ¹æ½ÄÀ¸·Î µ¥ÀÌÅ͸¦ ¾Ïȣȭ/º¹È£È­ ÇÒ ¼ö ÀÖ½À´Ï´Ù.


RSA´Â ºñ´ëĪÇü ¾Ïȣȭ ¾Ë°í¸®ÁòÀ¸·Î ºê¶ó¿ìÀú¿¡¼­ °ø°³Å°·Î ¾Ïȣȭ Çؼ­ µ¥ÀÌÅ͸¦ ¼­¹ö·Î º¸³»¸é ¼­¹ö¿¡¼­´Â °³ÀÎÅ°·Î º¹È£È­ ÇÒ ¼ö ÀÖ½À´Ï´Ù.


JSEncrypt´Â http://travistidwell.com/jsencrypt/ ¿¡¼­ ´Ù¿î·Îµå ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ »çÀÌÆ®¿¡ ¼³¸íµÇ¾î ÀÖµíÀÌ JSEncrypt´Â http://www-cs-students.stanford.edu/~tjw/jsbn/ ¿¡ ÀÖ´Â ´Ù¾çÇÑ ¾Ïȣȭ °ü·Ã ¶óÀ̺귯¸®µéÀÇ ·¡ÆÛ·Î ÇϳªÀÇ ÆÄÀÏ¿¡ ÇÊ¿äÇÑ ¶óÀ̺귯¸®¸¦ ¸ðµÎ Æ÷ÇÔÇÏ°í ÀÖ°í, °£ÆíÇÑ API¸¦ Á¦°øÇÕ´Ï´Ù.


JSEncrypt ȨÆäÀÌÁö



´Ù¿î·Îµå ¹ÞÀº ÆÄÀÏÀº jsencrypt-master.zip ÀÔ´Ï´Ù. ¾ÐÃàÀ» Ç®¸é bin Æú´õ ¾Æ·¡¿¡ jsencrypt.min.js ÆÄÀÏ Çϳª¸¸ ÀÖÀ¸¸é µË´Ï´Ù.


Å×½ºÆ®¸¦ À§Çؼ­´Â °³ÀÎÅ°¿Í °ø°³Å° ½ÖÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù. opensslÀ» »ç¿ëÇؼ­ Å°¸¦ ¸¸µì´Ï´Ù. opensslÀÇ ¼³Ä¡¹× »ç¿ë¹ýÀº "Windows¿¡¼­ TOMCAT¿¡ °³¹ß¿ëÀ¸·Î SSL Àû¿ëÇϱâ"¸¦ ÂüÁ¶Çϼ¼¿ä.



- °³ÀÎÅ°¸¦ ¸¸µì´Ï´Ù. Å×½ºÆ®¿ëÀ¸·Î ¸¸µé°ÍÀ̹ǷΠ¾Ïȣȭ´Â ÇÏÁö ¾ÊÀº 1024bit Å°¸¦ ¸¸µì´Ï´Ù.


D:\cert>openssl genrsa -out private.key 1024


- °ø°³Å°¸¦ ¸¸µì´Ï´Ù.


D:\cert>openssl rsa -in private.key -out public_key.pem -pubout



ÀÌÁ¦ Å×½ºÆ®¿ë ÆäÀÌÁö¸¦ ¸¸µì´Ï´Ù. °³ÀÎÅ°¿Í °ø°³Å°´Â <textarea>¿¡ ³Ö¾î µÎ¾ú½À´Ï´Ù. Æò¹®°ú ¾ÏȣȭµÈ ¹®Àå, º¹È£È­µÈ ¹®ÀåÀ» ³ÖÀ» ÀÔ·Â Çʵå¿Í ¾Ïȣȭ/º¹È£È­¸¦ ½ÇÇàÇÒ ¹öÆ°À» ¸¸µì´Ï´Ù.


<div style="display:flex;">

<div>

<label for="privateKey">Private key</label><br />

<textarea id="privateKey" cols="66" rows="16">-----BEGIN RSA PRIVATE KEY-----

MIICXQIBAAKBgQDLZL7JkIAxVOLqtEZr+SjJZYqS59ARp3/Z/l5Q6AOWryyrCJI4

A/4RjFiZ2lN2a08WGgZuYrM+rk7mXmxQdAX1aUTXk9xxZX2YrO9g2TMxpJzrdDD6

AKbDSqz9TLx2mBuLFKr+dJXX4FSg6GQF9ZAlP/PxuriRMQ5kbnqGPiMCvwIDAQAB

AoGAMlaw0XouAAeeUbBkbXyxF4dGEK3G1Ve7UNyfwy5pFPYt+/aXGb4DN5ygoRNj

7L8KR9IRHWjYK/9AD8v2ysKsZmuXNt23ojkKHq5wirSCpO2vb244ApMQAlvZYdoA

eUaYjMyq9RLBsPXh8yLAMrLGU6Yxsv5evRjrHnStW8LcImECQQDwnypVThxZP5d5

vxDHV4xFvS0PFucR05TIEtpLvGIGQ8bzol9jz+A4irpIRHnyRfydyJQziS7Svp9E

sSlWiOaVAkEA2GR8XZPTXTwtotF4dSSqu0sdERUCyShTAK4/vRjGviH0qITGPk+Z

eCQp2ZV0WsY84/6mMRviiBn92+J7hS5TAwJAASRQOB1pxwalOl+svbVtpfsS1qp+

KDh/0T89p/RZ5ru1mvxfRYL8BmiqH6OrjHnGjB0ijugMv9VFvja1AoMdzQJBALjo

1SUZpunq/Iw/NxHS7Vnyi7oHHERMgvD39VtfCqV6WpiOLOEeH+R78o8NmUngUDP7

bIRWcbMfksAMvsRFm4UCQQC3suGb43vEPOv8dGaIX7DxRCuvbgI+3mRn07bZe//i

axiQXphcMJArJB4bpxl+Sdq59miHPhHpTIYGN9fVHYr+

-----END RSA PRIVATE KEY-----</textarea><br />

<label for="publicKey">Public key</label><br />

<textarea id="publicKey" cols="66" rows="7">-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLZL7JkIAxVOLqtEZr+SjJZYqS

59ARp3/Z/l5Q6AOWryyrCJI4A/4RjFiZ2lN2a08WGgZuYrM+rk7mXmxQdAX1aUTX

k9xxZX2YrO9g2TMxpJzrdDD6AKbDSqz9TLx2mBuLFKr+dJXX4FSg6GQF9ZAlP/Px

uriRMQ5kbnqGPiMCvwIDAQAB

-----END PUBLIC KEY-----</textarea>

</div>

<div style="padding-left: 10px;">

<label for="plainText">Æò¹®</label><br />

<input type="text" id="plainText" style="width:400px;" /><br />

<label for="encryptedText">¾ÏȣȭµÈ ¹®Àå</label><br />

<input type="text" id="encryptedText" style="width:400px;" /><br />

<label for="decryptedText">º¹È£È­µÈ ¹®Àå</label><br />

<input type="text" id="decryptedText" style="width:400px;" /><br />

<button id="encrypt">¾Ïȣȭ</button><button id="decrypt">º¹È£È­</button>

</div>

</div>



ÀÚ¹Ù½ºÅ©¸³Æ® ºÎºÐ ÀÔ´Ï´Ù. jquery´Â JSEncrypt¶óÀ̺귯¸®¿¡ ÇÊ¿äÇÑ °ÍÀº ¾Æ´Õ´Ï´Ù. Æû ¿ä¼Ò¸¦ ½±°Ô ´Ù·ç±â À§Çؼ­ »ç¿ëµÇ¾ú½À´Ï´Ù. ¾Ïȣȭ¿¡´Â °ø°³Å°¸¦ »ç¿ëÇÏ°í º¹È£È­ ¿¡´Â °³ÀÎÅ°¸¦ »ç¿ëÇß½À´Ï´Ù.


<script type="text/javascript" src="./js/jquery-3.3.1.min.js"></script>

<script type="text/javascript" src="./js/jsencrypt.min.js"></script>

<script type="text/javascript">

//<![CDATA[

$(document).ready(function() {

    // ¾Ïȣȭ Çϱâ

    $('#encrypt').click(function () {

        // °´Ã¼ »ý¼º

        var crypt = new JSEncrypt();

        // Å° ¼³Á¤

        crypt.setPrivateKey($('#publicKey').val());


        var plainText = $("#plainText").val();

        // ¾Ïȣȭ

        var encryptedText = crypt.encrypt(plainText);

        $('#encryptedText').val(encryptedText);

    });


    // º¹È£È­ Çϱâ

    $('#decrypt').click(function () {

        var crypt = new JSEncrypt();

        crypt.setPrivateKey($('#privateKey').val());


        var encryptedText = $('#encryptedText').val();

        // º¹È£È­

        var decryptedText = crypt.decrypt(encryptedText);

        $('#decryptedText').val(decryptedText);

    });

});

//]]>

</script>


½ÇÇà°á°ú ÀÔ´Ï´Ù.


ÀÚ¹Ù½ºÅ©¸³Æ® ¾ÏÈ£ÇÏ/º¹È£È­ ½ÇÇà°á°ú



ÀÚ¹Ù½ºÅ©¸³Æ® RSA ¾Ïȣȭ ¶óÀ̺귯¸® JSEncrypt »ç¿ë¹ýÀ» ¾Ë¾Æ º¸¾Ò½À´Ï´Ù.



Ãâó: https://offbyone.tistory.com/343 [½¬°í ½ÍÀº °³¹ßÀÚ]