본문 바로가기

[IT/Programming]/Algorithm/Database

Data ENCRYPT (정보 암호화)

반응형
# Data ENCRYPT (정보 암호화) 여러군데에 쓰이는 데이터 암호화. 암호를 암호화해서 저장할때도 쓰이고. 개인정보 보호할때도 쓰이고. 통신을 암호화하고 싶을때에도 쓰이고. 단방향 암호화 (원래의 정보를 확인할 필요가 없는 경우) 는 그냥 hash function 쓰면 되는듯도. 보통 단방향 암호화는 input 이 예전 input 과 일치하는지를 확인하는 용도로 자주 쓰이는듯. (즉 password 확인 같은거.) ## PH
  • 2014-12-21: 예전에 썼던 글이긴 한데, 조금 더 정리해서 posting.
## TOC ## In MySQL MySQL 에서의 암호화 . 대충만 정리. ```[.scrollable.lang-sql] DROP TABLE IF EXISTS `TestUsers`; CREATE TABLE `TestUsers` ( `i` bigint unsigned AUTO_INCREMENT , `id` char(20) NOT NULL UNIQUE , `pwd` binary(64) NOT NULL , `pwd_salt` binary(32) NOT NULL , `e_mail` varchar(50) NOT NULL UNIQUE , PRIMARY KEY (`i`) ); DESC `TestUsers`; SHOW CREATE TABLE `TestUsers`; // For `pwd_salt`, SELECT SHA2(RANDOM_BYTES(32), 256); // aea253bc0be70853cfbdf22d1f16de9a8f16ba6a47be08440c52572759994036 // 64 (=256/4) words = 32 bytes (* 8 bit/byte) // Why does this need BINARY(64)??? Unhex it. SELECT UNHEX(SHA2(RANDOM_BYTES(32), 256)); SELECT RANDOM_BYTES(32); // For `pwd`, SHA2(CONCAT(`pwd_salt`, `pwd`), 512); // 414c33de702e93bad92529973d651c7e4c5811ebe4a7f74775386245c0cfbc2b3cf57260a833a4a6ad923bb9e13c9f8da768ad4d435b90b54f2c4c75ee3b22e4 // 128 (=512/4) words = 64 bytes (* 8 bit/byte) // Why does this need BINARY(128)??? Unhex it. INSERT INTO `TestUsers` (`id`, `pwd`, `pwd_salt`, `e_mail`) VALUES ('abc', 'password', 'SHA2(RANDOM_BYTES(32), 256)', 'abc@email.com'); INSERT INTO `TestUsers` (`id`, `pwd`, `pwd_salt`, `e_mail`) VALUES ('abc', SHA2(RANDOM_BYTES(32), 256), 'password', 'abc@email.com'); INSERT INTO `TestUsers` (`id`, `pwd`, `pwd_salt`, `e_mail`) VALUES ('abc', SHA2(RANDOM_BYTES(32), 256) as salt, 'password', 'abc@email.com'); INSERT INTO `TestUsers` (`id`, `pwd`, `pwd_salt`, `e_mail`) VALUES ('abc', CONCAT(salt, 'password'), SELECT SHA2(RANDOM_BYTES(32), 256) as salt, 'abc@email.com'); SET @s = 'INSERT INTO `TestUsers` (`id`, `pwd`, `pwd_salt`, `e_mail`) VALUES (?, ?, ?, ?)'; PREPARE stmt FROM @s; SET @a = 'abc'; SET @c = RANDOM_BYTES(32); SET @d = 'email@email.com'; SET @b = UNHEX(SHA2(CONCAT(@c,'password'), 512)); EXECUTE stmt USING @a, @b, @c, @d; SELECT @a, @b, @c, @d; SELECT @c=(SELECT `pwd_salt` FROM `TestUsers` ORDER BY `i` desc LIMIT 1); SELECT * FROM `TestUsers`; SELECT CAST(@b AS binary); DEALLOCATE PREPARE stmt; // Check equality. SELECT `id`, `pwd`=SHA2(CONCAT(`pwd_salt`,'password'), 512) FROM `TestUsers`; SELECT `id`, `pwd`=UNHEX(SHA2(CONCAT(`pwd_salt`,'password'), 512)) FROM `TestUsers`; SELECT `id`, `pwd`=SHA2(CONCAT(`pwd_salt`,'password'), 512) FROM `TestUsers` WHERE `id`='def'; SELECT `id`, `pwd`, UNHEX(SHA2(CONCAT(`pwd_salt`,'password'), 512)) FROM `TestUsers`; ```/ ## In JAVA class java.security.MessageDigest 를 이용. ```[.scrollable.lang-java] import java.security.MessageDigest; public static byte[] pwdEncrypt(byte[] salt, String pwd) throws Exception { // NoSuchAlgorithmException, UnsupportedEncodingException MessageDigest sha512 = MessageDigest.getInstance("SHA-512"); return sha512.digest((new String(salt,"UTF-8")+pwd).getBytes("UTF-8")); } ```/ ## RRA

    Encryption and Compression

  1. NHN 개발자 블로그 Hello World - 안전한 패스워드 저장, 2013-03-25
  2. codeok.net - 패스워드 보안의 기술, 2015-01-09, by 박영록
  3. kipid's blog - 해시 테이블과 해시 함수 (Hash Table and Hash function)
  4. MySQL

  5. MySQL 5.6 Manual - 12.13 Encryption and Compression Functions
  6. MySQL: what data type to use for hashed password field and what length?, 2008-10-29, asked by z-boss.
  7. nsjung74's blog - MySQL 테이블 데이터 암호화 비법들, 2009-07-07
  8. kipid's blog - SQL (Structured Query Language) 을 배워보자
  9. JAVA

  10. JAVA 8 API - java.security.MessageDigest
  11. Secure transfer protocol

  12. Wiki - HTTP Secure (HTTPS 한글 페이지)
  13. Wiki - RSA (cryptosystem)
  14. 미닉스의 작은 이야기들 - [웹툰03] SSL이란 무엇인가? 1/2 and [웹툰04] SSL이란 무엇인가? 2/2
반응형