본문 바로가기
  • Code Smell

Copy&Paste11

[Java] URL 리소스 다운로드 URL 리소스 다운로드 Github 소스 URL 경로를 입력하면 다운로드 받는 스트림을 제공합니다. 대표적으로 이미지, 파일 같은 것을 다운로드 가능합니다. 코드 package sunghs.java.utils.file; import lombok.extern.slf4j.Slf4j; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; /** * URL 리소스 다운로더 * * @author https://sunghs.tistory.com * @see source */ @Sl.. 2021. 9. 8.
[Java] 이진파일 문자열 변환 (binary to string) 이진파일 문자열 변환 (binary to string) 예전에 포스팅 한 내용을 토대로 바로 쓸수 있도록 java-utils에 추가하고 테스트 케이스를 만들었습니다. exe, docs, pptx, xlsx 파일 등 아래와 같이 문자열 변환이 불가능한 파일을 비트 연산으로 ascii 로 변경하는 작업입니다. 포스팅 보기 바이너리 파일을 텍스트 편집기 등으로 열면 이런식으로 보이죠. 문자열 변환이 불가능하기 보다는, new String(byte[] b) 로 읽고, 다시 getBytes() 로 쓰게 되면 데이터 손실이 발생하는데 그 손실 없이 String 으로 바꾸고 byte[] 로 바꾸는 기능입니다. 소스는 여기의 sunghs.java.utils.convert.BinaryConverter 클래스입니다. 소스.. 2021. 7. 27.
[Java] HeapDump 파일 만들기 HeapDump 파일 만들기 Github API 등 web application, 또는 daemon 형태의 java background application 서비스를 하다보면, OutOfMemoryException이 발생하는 경우가 있다. 또한 메모리가 튈 일이 없는 상황인데도 점차 주기적으로 Heap 점유율이 늘어난다던지 하는 경우가 있는데 이런 경우 HeapDump 파일을 만들어 분석하게 되면, 어느 객체가 메모리를 많이 차지하는지, 현재 참조가 끊어진 객체들은 어떤 것들이 있는지에 대해 분석 할 수 있다. spring 프로젝트의 경우 actuator 모듈을 도입하게 되면, HeapDump 파일을 내려 받을 수 있는데, 사실 힙덤프 하나만을 위해서 actuator 도입을 해야하는 부담스러운 상황이거나.. 2021. 3. 17.
[JAVA] Java Object List 중복제거 Java Object List 중복제거 Github 소스 Java8 이상의 Collections에는 Stream API 사용 시 distinct라는 중복 제거 메소드가 있다. Stream API의 distinct 메소드는 Object 의 equals 로 비교하므로 객체 자체가 같은지를 비교한다. 따라서 리터럴 형태의 String을 인자로 갖는 List등은 비교가 가능한데, Dto 형태의 모델은 비교가 안되며 Object 자체도 같은 주소값을 가지는 경우에는 가능한데 안의 속성을 비교해야 하는 경우 비교가 어렵다. 이런 경우 사용 할 수 있는 Utils 클래스이다. 아래 학생 정보를 담는 클래스가 있다고 하자 Dto Class 예 @Data public class StudentInfo { private l.. 2021. 1. 4.
[Java] RSA 양방향 암호화 RSA 양방향 암호화 Github AES/SEED 암호화는 하나의 키를 가지고 암/복호화를 같이하는 대칭키(=암호화/복호화 키가 같음) 암호화 방식이라면 RSA는 암호화 키와 복호화 키가 다른 비대칭키 암호화 이다. 키를 만드는 과정 1. 두 소수 p , q를 준비한다. 2. p - 1, q - 1과 각각 서로소인 정수 e를 준비한다. 3. ed를 (p - 1)(q - 1)으로 나눈 나머지가 1이 되도록 하는 d를 찾는다. 4. N = pq를 계산한 후, N와 e를 공개한다. 이들이 바로 공개키이다. 한편 d는 숨겨두는데, 이 수가 바로 개인키이다. 5. 이제 p, q, (p - 1)(q - 1)는 필요 없거니와 있어 봐야 보안에 오히려 문제를 일으킬 수 있으니, 파기한다.나무위키 RSA 설명 공캐키가 .. 2020. 8. 14.
[Java] SEED-128 양방향 암호화 SEED128 양방향 암호화 Github AES-128과 같이 대칭키를 가진 양방향 암호화이다. 암호화 및 복호화가 가능하다. 유저키가 16자리를 기반으로 암/복호화를 진행한다. 국내 KISA에서 개발되었으며 JAVA 기본 내장 알고리즘이 아니므로 SEED 블록 알고리즘 클래스 파일이 필요하다. 너무 길어서 gitHub에 올려놓았다. https://github.com/sunghs/java-utils/blob/master/src/main/java/sunghs/java/utils/cipher/support/KisaSeedCbc.java 소스 /** * SEED-128 암호화 * * @author https://sunghs.tistory.com * @see source */ public class Seed12.. 2020. 7. 9.
[Java] AES-128 양방향 암호화 AES128 양방향 암호화 Github 코드 Hash 암호화와는 다르게 대칭키를 가지고 암호화와 복호화를 진행한다. AES 뒤에 붙는 128이나 192, 256은 대칭키의 bit수를 나타내는 것으로 AES-128의 경우 128bit의 대칭키를 쓰는 암호화 알고리즘이다. 128bit는 16byte이므로, 키의 String length가 16자리이다. (192bit = 24자리, 256bit = 32자리) 키의 길이에 따라서 암호화 라운드의 수만 다르므로 AES-128과 AES-192, AES-256은 구현되는 소스는 같다. 그러나 Java에서는 AES키 길이에 제한을 두기때문에 현재 공식적으로 AES-128밖에 지원하지 않는다. AES-128 이상 사용하려면 JRE의 정책 라이브러리를 갈아 끼우는 방법이 .. 2020. 7. 5.
[Java] Hash 암호화 (MD5, SHA256) Hash 암호화 (MD5, SHA-256) GitHub 소스 Hash 기반 암호화는 단방향 암호화로, 한번 암호화 되면 복호화 할 수 없다. 입력 길이가 어떻든 출력 길이가 같아서 비둘기 집 원리에 의해 결과값 충돌은 이론상 피할 수 없어서 그렇다. (충돌 : 입력이 다른데, 암호화 된 출력이 같은 경우) 심지어 MD5는 충돌 재현이 되어서 MD5는 거의 안쓰이고 현재는 SHA-256 이상부터 쓰이고 있다. MD5 출력값 갯수 16^32개 SHA-256 출력값 갯수 16^64개 dependency 추가 없음 코드 /** * Hash 단방향 암호화 * * @author https://sunghs.tistory.com * @see source */ public class HashCipher { private.. 2020. 6. 28.
[Java] 엑셀 읽기 (ExcelParse, ExcelRead, Xssf) 엑셀 읽기 깃허브 https://github.com/sunghs/java-utils apache-poi를 이용한 엑셀 파싱 라이브러리 추가 필요 build.gradle // Excel // https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml implementation('org.apache.poi:poi-ooxml:4.1.2')2020.06 현재 가장 최신버전이다. (2020. 02 버전) /** * 엑셀 파일을 읽어 반환해주는 파서 * * @author https://sunghs.tistory.com * @see source */ public class ExcelParser { private final boolean isHeader; .. 2020. 6. 22.