๊ตฌ๋ถ | ์ค๋ช |
---|---|
์ํธํ(Encryption) | ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๊ฒ ๋ง๋ ํ, ๋์ค์ ๋ณตํธํ(decryption) ํด์ ๋ค์ ์๋๋๋ก ๋๋๋ฆด ์ ์์ |
ํด์(Hash) | ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ๊ธธ์ด์ ๊ณ ์ ๋ ๊ฐ์ผ๋ก ๋ฐ๊ฟ. ํ ๋ฒ ๋ฐ๊พธ๋ฉด ์ ๋ ๋๋๋ฆด ์ ์์(์ผ๋ฐฉํฅ) |
โ
StringBuffer
๋ String์ "๋ถ๋ณ์ฑ(immutable)" ๋ฌธ์ ๋ฅผ ๋ณด์ํ ํด๋์ค
๋ฌธ์์ด์ ํจ์จ์ ์ผ๋ก ์์ ยท๊ฒฐํฉ๊ฐ๋ฅํ ๊ฐ๋ณ ๋ฌธ์์ด ํด๋์ค
๋ฉ์๋ | ์ค๋ช |
---|---|
append() | ๋ฌธ์์ด์ ๋์ ์ถ๊ฐ |
insert() | ์ง์ ํ ์์น์ ๋ฌธ์์ด ์ฝ์ |
delete() | ์ง์ ํ ๋ฒ์ ๋ฌธ์์ด ์ญ์ |
replace() | ๋ฒ์ ๋ด ๋ฌธ์์ด์ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ๋์ฒด |
reverse() | ๋ฌธ์์ด์ ๋ค์ง์ |
setLength() | ๋ฌธ์์ด ๊ธธ์ด ์กฐ์ (๊ธธ์ด ์ค์ด๊ฑฐ๋ ๋๋ฆผ) |
toString() | ์ต์ข
๋ฌธ์์ด ๋ฐํ (String ์ผ๋ก ๋ณํ) |
StringBuffer sql = new StringBuffer();
sql.append("insert into admin(id, pwd, name, email) ");
sql.append("values(?,?,?,?)");
PreparedStatement pstmt = null;
try {
pstmt = appmain.con.prepareStatement(sql.toString());
// ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฐ ์ธํ
pstmt.setString(1, t_id.getText());
pstmt.setString(2, StringUtil.getSecuredPass(new String(t_pwd.getPassword())));
pstmt.setString(3, t_name.getText());
pstmt.setString(4, t_email.getText());
int result = pstmt.executeUpdate(); // DML ์คํ
if (result > 0) {
JOptionPane.showMessageDialog(this, "๊ด๋ฆฌ์ ๊ฐ์
์ฑ๊ณต");
} else {
JOptionPane.showMessageDialog(this, "๋ฑ๋ก์คํจ");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
String์ ๋ถ๋ณ(immutable) ๊ฐ์ฒด๋ค.
โ ํ ๋ฒ ์์ฑ๋๋ฉด ๋ด๋ถ ๋ฌธ์์ด์ ์ ๋ ๋ฐ๊ฟ ์ ์์
โ "a" + "b" ๊ฐ์ ์ฐ์ฐ์ ํ๋ฉด, ์๋ก์ด String ๊ฐ์ฒด๊ฐ ๊ณ์ ์์ฑ๋ผ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์
๊ทธ๋์ ๋ฌธ์์ด์ ๊ณ์ ๋ถ์ด๊ฑฐ๋ ์์ ํด์ผ ํ๋ ์ํฉ์์๋ StringBuffer
๋๋ StringBuilder
๋ฅผ ์ฌ์ฉํจ
๊ตฌ๋ถ | ์ค๋ช |
---|---|
String | ๋ถ๋ณ ๊ฐ์ฒด. ๋ฌธ์์ด ์์ ์ ์ ๊ฐ์ฒด ์์ฑ๋จ. |
StringBuffer | ๊ฐ๋ณ ๊ฐ์ฒด. ๋ด๋ถ ๋ฒํผ์์ ๋ฌธ์์ด์ ์์ ํจ โ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ |
StringBuilder | StringBuffer ์ ๊ฑฐ์ ๊ฐ์ง๋ง, ์ฑ๊ธ์ค๋ ๋ ์ ์ฉ(์๋ ๋น ๋ฆ) |
StringBuffer
, ๋ฐ์ธ๋ฉ์๋ String
์ ์จ๋ผcreate table admin(
admin_id int primary key auto_increment,
id varchar(20),
pwd varchar(64),
--pwd๋ ์ํธํ๋๋ฌธ์ 64์
name varchar(20),
email varchar(30)
);
JavaSE๋ ์ด๋ฏธ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ํจ์๋ฅผ ๋ณด์ ํ๊ณ ์์
public class StringUtil {
public static String getSecuredPass(String pwd) {
String pass = pwd;
StringBuffer sb = new StringBuffer(); // โ
String์ ๋ถ๋ณ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฐ์ฒด
try {
// 1๏ธโฃ SHA-256 ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ฒด ์์ฑ
MessageDigest md = MessageDigest.getInstance("SHA-256");
// 2๏ธโฃ ์
๋ ฅ ๋ฌธ์์ด์ UTF-8 ๋ฐ์ดํธ ๋ฐฐ์ด๋ก ์ชผ๊ฐ๊ธฐ
byte[] hash = md.digest(pass.getBytes("UTF-8"));
// System.out.println(hash.length); // 32 ์ถ๋ ฅ: 256๋นํธ = 32๋ฐ์ดํธ
// 3๏ธโฃ ์๊ฒ ์ชผ๊ฐ์ง ๋ฐ์ดํธ ๋ฐฐ์ด์ 16์ง์ ๋ฌธ์์ด๋ก ๋ณํ
for (int i = 0; i < hash.length; i++) {
/*
* byte ๋ฐ์ดํฐ๋ฅผ 16์ง์๋ก ๋ณํํ ๋, byte๊ฐ์ด ์์์ธ ๊ฒฝ์ฐ
* intํ์ผ๋ก ๋ณํ๋๋ฉด์ ๋ถํธ ๋นํธ๊ฐ ์๊ธด๋ค.
* ์ด ๋ถํธ ๋นํธ๋ ์ํธํ์ ๋ฌด๊ดํ๋ฏ๋ก ์ ๊ฑฐํด์ค์ผ ํจ.
*
* โ โ
0xff์ & ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํธ ๋นํธ ์ ๊ฑฐ (์ ์ํ 0~255๋ก ์ฒ๋ฆฌ)
* ์ฐธ๊ณ : Java์์ byte ์ฐ์ฐ ์ ์๋์ผ๋ก int๋ก ์น๊ฒฉ๋จ
*/
String hex = Integer.toHexString(0xff & hash[i]);
// ํ ์๋ฆฌ ์์ธ ๊ฒฝ์ฐ ์์ 0์ ๋ถ์ฌ ๋ ์๋ฆฌ๋ก ๋ง๋ค์ด์ค (64์ ๋ง์ถ๊ธฐ ์ํด)
if (hex.length() < 2) sb.append("0");
// String ๋์
sb.append(hex);
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// ์ต์ข
์ ์ผ๋ก ์์ฑ๋ 64์๋ฆฌ SHA-256 ํด์ ๋ฌธ์์ด ๋ฐํ
return sb.toString();
} //sb๋ ์คํธ๋ง ์๋ฃํ ์๋๋๊น toString๋ฉ์๋ ์ฌ์ฉ
}
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ๋๋,
1๏ธโฃ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ๋๊ฐ์ด SHA-256
์ผ๋ก ํด์
2๏ธโฃ DB์ ์๋ ๊ฐ๊ณผ ๋น๊ตํด์ ์ผ์นํ๋์ง ํ์ธ
String pwd = new String(t_pwd.getPassword()); // ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ
String hash = StringUtil.getSecuredPass(pwd); // โ โ
SHA-256 ํด์๊ฐ ์์ฑ
String sql = "select * from admin where id=? and pwd=?"; // โ
DB์ ์ ์ฅ๋ ํด์๊ฐ๊ณผ ๋น๊ต
pstmt.setString(1, id);
pstmt.setString(2, hashPwd);