sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
extra_vars5 | |
extra_vars6 |
[Java 보안과 암호화] 문서 발췌클라이언트에서 서버로 평문을 전송하는 것을 피하기 위해서, 클라이언트는 평문 대신에 패스워드 메시지를 축약하여 보내게 되며,
서버는 보유하고 있는 패스워드 사본의 메시지 축약을 비교하여 두 개의 메시지 축약 내용이 같을 경우에 클라이 언트를 인증하게 된다.
서버는 보유하고 있는 패스워드 사본의 메시지 축약을 비교하여 두 개의 메시지 축약 내용이 같을 경우에 클라이 언트를 인증하게 된다.
·미리보기 | 소스복사·
- import java.io.DataInputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.security.MessageDigest;
- public class MasherServer {
- public void exec(int port) throws Exception {
- ServerSocket ss = new ServerSocket(port);
- System.out.println("Waiting.... port : " + port);
- Socket s = ss.accept();
- DataInputStream in = new DataInputStream(s.getInputStream());
- // 클라이언트가 보낸 순서로 받는다.
- String user = in.readUTF();
- long time = in.readLong();
- double randomQ = in.readDouble();
- int leng = in.readInt();
- byte[] masherBytesIn = new byte[leng];
- in.readFully(masherBytesIn);
- byte[] masherBytesOut = UserMasher.makeDigest(user, getPassword(), time, randomQ);
- if (isUser(masherBytesIn, masherBytesOut)) {
- System.out.println("Login");
- } else {
- System.out.println("No password");
- }
- in.close();
- }
- private String getPassword() {
- return "rlarudwls";
- }
- private boolean isUser(byte[] inBytes, byte[] outBytes) {
- return MessageDigest.isEqual(inBytes, outBytes);
- }
- public static void main(String[] args) throws Exception {
- if (args.length < 1) {
- System.out.print("Input Port....");
- System.exit(0);
- }
- MasherServer ms = new MasherServer();
- ms.exec(Integer.parseInt(args[0]));
- }
- }
·미리보기 | 소스복사·
- import java.io.DataOutputStream;
- import java.net.Socket;
- import java.util.Date;
- public class MasherClient {
- public void exec(String user, String password, String host, int port) throws Exception {
- Date date = new Date();
- long time = date.getTime();
- double randomQ = Math.random();
- byte[] masherBytes = UserMasher.makeDigest(user, password, time, randomQ);
- Socket s = new Socket(host, port);
- DataOutputStream out = new DataOutputStream(s.getOutputStream());
- out.writeUTF(user);
- out.writeLong(time);
- out.writeDouble(randomQ);
- out.writeInt(masherBytes.length);
- out.write(masherBytes);
- out.flush();
- out.close();
- }
- public static void main(String[] args) throws Exception {
- if (args.length < 2) {
- System.out.print("Input Server address and port....");
- System.exit(0);
- }
- String user = "inter999";
- String password = "rlarudwls";
- MasherClient mc = new MasherClient();
- mc.exec(user, password, args[0], Integer.parseInt(args[1]));
- }
- }
·미리보기 | 소스복사·
- import java.io.ByteArrayOutputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- public class UserMasher {
- public static byte[] makeDigest(String user, String password, long time, double randomQ)
- throws NoSuchAlgorithmException {
- MessageDigest md = MessageDigest.getInstance("SHA");
- md.update(user.getBytes());
- md.update(password.getBytes());
- md.update(makeBytes(time, randomQ));
- return md.digest();
- }
- public static byte[] makeBytes(long time, double randomQ) {
- try {
- ByteArrayOutputStream byteout = new ByteArrayOutputStream();
- DataOutputStream dataout = new DataOutputStream(byteout);
- dataout.writeLong(time);
- dataout.writeDouble(randomQ);
- return byteout.toByteArray();
- } catch (IOException ioe) {
- return new byte[0];
- }
- }
- }
댓글 0
번호 | 제목 | sitelink1 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
공지 | [계속 추가중] SBOM 용어 정의 | 황제낙엽 | 2025.04.10 | 52 | |
공지 | [계속 추가중] Keycloak 용어 및 설정 옵션 정의 | 황제낙엽 | 2024.02.02 | 631 | |
13 | [Copilot] javax.crypto 패키지를 사용하여 암호화, 복호화 하는 방법 | 황제낙엽 | 2024.06.07 | 96 | |
12 | Apache Log4j 2 보안 업데이트 권고 | https://www.boho.or.kr/data/secNoticeVie...ence=36389 | 황제낙엽 | 2021.12.13 | 134 |
11 | OpenSSL사용방법 메모, RSA암호의 최대 사이즈, JCA/JCE가이드 | 황제낙엽 | 2007.09.27 | 173 | |
10 | Java Cryptography Extension (JCE) 개요 | 황제낙엽 | 2007.09.27 | 345 | |
9 | Java에서 암호화하고 C++에서 복호화하는 방법 | 황제낙엽 | 2007.09.27 | 378 | |
8 | 비밀키를 Keytool에서 취급할 수 있는 형식으로 변환방법 | http://java-house.jp/ml/archive/j-h-b/051472.html | 황제낙엽 | 2007.09.27 | 229 |
7 | 공개키 암호화의 수학적 알고리즘과 자바 구현 | 황제낙엽 | 2007.09.22 | 207 | |
6 | RSA 암호화 알고리즘을 구현한 자바예제 (산술계산) | 황제낙엽 | 2007.09.17 | 326 | |
5 |
RSA 암호화 프로그램 예제 (BigInteger 이용)
![]() | 황제낙엽 | 2007.09.08 | 257 | |
» | 해쉬를 이용한 패스워드 로그인 | 황제낙엽 | 2007.09.05 | 111 | |
3 |
Java 보안과 암호화 (개론)
![]() | 황제낙엽 | 2007.09.05 | 117 | |
2 | RSA 공개키 암호화 방식 (java.security, javax.crypto, au.net.aba.crypto.provider 패키지 이용) | 황제낙엽 | 2007.09.05 | 279 | |
1 | 자바 암호화 기법 - MD5를 이용한 해쉬키 생성 (Hash) | 황제낙엽 | 2007.09.01 | 316 |