카테고리 없음
자바스크립트 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
]);
}