카테고리 없음

자바스크립트 CryptoJS / php openssl AES256 CBC 양방향 암호화

오페투오소 2023. 4. 17. 21:52

클라이언트, 서버간 암호화 통신을 위해 만들었지만, 

비대칭 암호화가 더 적합한듯함

 

aes암호화는 대칭형 


<script>
var key = CryptoJS.enc.Hex.parse("1234567811111111abcdefabcd123123");
var iv =  CryptoJS.enc.Hex.parse("abcd1231231234567811111111abcdef");
function Encrypt(value) {
    var encrypted = CryptoJS.AES.encrypt(value, key, {iv:iv,mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
    console.log(encrypted)
    encrypted = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
    console.log(encrypted)
    return encrypted;
}

function Decrypt(data){
    const cipher =  CryptoJS.AES.decrypt(data, key, {
                      iv: iv,
                      padding: CryptoJS.pad.Pkcs7, // default setting (없어도 됨)
                      mode: CryptoJS.mode.CBC,
                  });
    console.log("decode ",cipher)

    const utf8String = CryptoJS.enc.Utf8.stringify(cipher);
    console.log("decode2 ",utf8String)
};


function test(){
    var in_enc_msg = Encrypt("가나다라마바사");

     $.ajax({
        headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
        url : "/test",
        type : "post",
        data : {"in_enc_msg":in_enc_msg},
        dataType : "json",
        success : function(data){
               
                console.log(Decrypt(data['endata']))

        }
    });
}

</script>
 public function test(Request $request){
     $endata = $request->input('in_enc_msg'); // id
     //$plndata = "복받으세여";

     $skey = pack("H*", "1234567811111111abcdefabcd123123"); // 꼭 16진수
     $iv =  pack("H*", "abcd1231231234567811111111abcdef"); // 꼭 16진수

     // 복호화
     $dedata = openssl_decrypt(base64_decode($endata), "aes-128-cbc", $skey, OPENSSL_RAW_DATA, $iv);
     $plndata =  $dedata;

   
     $endata = base64_encode(openssl_encrypt($plndata , "aes-256-cbc", $skey, OPENSSL_RAW_DATA, $iv));

return response()->json([
    'success' => false
    , 'dedata' => $dedata
    , 'endata' => $endata
]);
 }