JSP practice_240503

Choi Suyeon·2024년 5월 3일

암호화

DBMS에 저장된 데이터를 보호하기 위해 수행.
java.security패키지에서 관련된 클래스를 제공.
SHA(Secure Hash Algorithm)와 양방향 암호화(복호화가 가능한)가 제공.
민감한 개인 정보를 처리할 때 사용.
일반문자열(PlainText)을 암호화 문자열(Cipher Text)로 변환하는 것.

  • SHA
    일방향 Hash : 복호화가 가능하지 않은 암호화(암호화 키X)
    MD2, MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512의 알고리즘을 지원.
    일반문자열에서 변환되는 Hash값의 길이가 다르다.

  • 복호화
    암호화된 문자열을 키를 사용하여 원래의 문자열로 변환할 수 있는 암호화.

  • 양방향 암호화(DES, 3DES, AES등 ) - 키 존재(대칭키, 비대칭키)
    DES(Data Encrytion Standard) : 1970년 개발, 잘 만들어진 암호화 알고리즘, 대칭키

  • 사용법)

  1. 알고리즘에 설정하여 생성
MessageDigest md = MessageDigest.getInstance(“algorithm “);//algorithm => SHA나 MD5 등.
//Plain Text를 Cipher Text로 변환
md.update( 일반문자열.getBytes() ); // 암호화 : encryption
 //사람이 알아 볼 수 없는 charset이 된다.

Base64  encoder를 사용하여 사람이 알아 볼 수 있는 문자열로 생성
Base64 b=new Base64();
new String( b.encode( md.digest() );
  • 예시
String msg="1234";//Plain Text
		
		try {
			//1. MessageDigest 생성
			MessageDigest md = MessageDigest.getInstance("MD5");			
			//2. 암호화 알고리즘에 의한 암호화 수행
			md.update(msg.getBytes());
			
			byte[] temp = md.digest();
			System.out.println(new String(temp));//사람이 알아볼 수 없다. => encoding
			Base64 base = new Base64();
			String cipherText = new String(base.encode(temp));//사람이 알아볼 수 있는 8859_1로 생성
			System.out.println(cipherText);
			
			//복호화가 가능한 암호화
			String name="김동섭";
			String key="CY9rzUYh03PK3k6DJie09g==";
			DataEncrypt de = new DataEncrypt(key);
			String encryptText = de.encryption(name);
			System.out.println("암호화 문자열 : "+ encryptText);
			
			//복호화
			DataDecrypt dd = new DataDecrypt(key);
			String decryptText = dd.decryption(encryptText);
			System.out.println("복호화 문자열 : " + decryptText);
		
		}catch(NoSuchAlgorithmException e) {
				e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (GeneralSecurityException e) {
			e.printStackTrace();
		}
  • DBMS 저장정보의 중요.
    DBMS에 저장되는 정보가 일반 문자열(Plain Text)인 경우 단순조회로 모든 정보가 조회되고 확인가능.
    => 정보보호가 되지 않는다.
    사이트의 관리자가 사용자의 정보를 손쉽게 학인할 수 있다.
    데이터 탈취시 모든 정보를 손쉽게 확인할 수 있다.

저장되는 정보의 중요도에 따라 암호화작업을 수행 => 정보보호 수행(비용 발생)
아무도 확인하지 못하도록 만들 때 => 일방향 Hash로 저장
: 비밀번호, 주민번호, cvc

관리자의 등급에 따라 확인이 가능해야 할 때 => 복호화가 가능함 암호화(양방향)
: id, phone, 이름, 이메일

일반문자열
생일, flag값, 주소

  • List만들기 - 많은 양의 레코드를 분할해서 보여주기
    1.총 레코드의 수 구하기
    int totalCount=rs.getInt(“cnt”); //11

2.한 화면에 보여줄 게시물의 수
int pageScale=10;

  1. 총 페이지수
    int totalPage=0;
    int remain=totalCount%pageScale;
    if( remain != 0){
    totalPage=totalCount/pageScale+1;
    }else{
    totalPage=totalCount/pageScale;
    }

    [1][2] [3]
    4.시작번호
    String tempPage=request.getParameter(“currentPage”);
    int currentPage=1;
    If( tempPage != null){
    currentPage=Integer.parseInt( tempPage );
    }
    int startNum=currentPage * pageScale - pageScale+1;

5.끝번호
int endNum=startNum+pageScale-1;

  1. 시작번호와 끝번호 사이의 레코드를 조회
    “select NUM, TITLE, ID, INPUT_DATE, CNT, rnum
    from (select NUM, TITLE, ID, INPUT_DATE, CNT,
    row_number() over(order by input_date desc) rnum
    from board)
    where rnum between ? and ?”

pstmt.setInt(1,startNum);
pstmt.setInt(2,endNum);

String tempPage = request.getParameter("currentPage");
int currentPage=1;
if(tempPage != null){
currentPage = Integer.parseInt(tempPage);
}
int startNum=currentPage;

0개의 댓글