kginicis-ts / INICIS_Stdpay

【 일반결제 】 :: PC/모바일 모듈 소통 공간입니다.
7 stars 0 forks source link

이니시스 모바일 P_CHKFAKE 해시값 #128

Closed miridih-justsmile closed 1 year ago

miridih-justsmile commented 1 year ago

image

위 설명대로 plainText가 "1000201505152087997041431678259123456789012345678901234567890" 일때

SHA512의 값은 "844fd0f85fff6669e818535eadc129eaac93688baaec22dbaeb507b455912b292db9e425f7bc238c84afa810746990b6e5befd60db3b6cbc4f4ff84a330c9234" 가 됩니다. (아래 이미지 참고)

image

이후 Base64로 encode하라는 지침에 따라 encode해도 "hE/Q+F//ZmnoGFNercEp6qyTaIuq7CLbrrUHtFWRKyktueQl97wjjISvqBB0aZC25b79YNs7bLxPT/hKMwySNA==" 와 값은 나오지 않습니다.

또한 "hE/Q+F//ZmnoGFNercEp6qyTaIuq7CLbrrUHtFWRKyktueQl97wjjISvqBB0aZC25b79YNs7bLxPT/hKMwySNA=="를 decode하면 알 수 없는 문자열만 출력됩니다.

무엇이 잘못된 것인가요? 제가 뭔가 순서를 다르게 한 것일까요?

miridih-justsmile commented 1 year ago
public InicisMobilePayPrepareFormPGRequestParam sign(final String signKey) {
    this.chkFake = Base64.getEncoder().encodeToString(
            hash(this.amount + this.oid + this.timestamp + signKey, HashUtils.Algorithm.SHA512).getBytes()
    );
    return this;
}
private String hash(String plainText, HashUtils.Algorithm algorithm) {
    try {
        final MessageDigest md = MessageDigest.getInstance(algorithm.name());
        md.update(plainText.getBytes(charset));
        final byte[] hashBytes = md.digest();
        final StringBuilder builder = new StringBuilder();
        for (byte hash : hashBytes) {
            builder.append(String.format("%02x", hash & 255));
        }
        return builder.toString();
    } catch (Exception e) {
        return "";
    }
}

제가 시도한 알고리즘은 위와 같이 구현하였습니다.

ts-inicis commented 1 year ago

Hex 인코딩이 필요합니다.

[ P_CHKFAKE 검수 ]

  1. PlainText = 1000201505152087997041431678259123456789012345678901234567890
  2. SHA512(PlainText) = 844fd0f85fff6669e818535eadc129eaac93688baaec22dbaeb507b455912b292db9e425f7bc238c84afa810746990b6e5befd60db3b6cbc4f4ff84a330c9234
  3. Base64_encode( SHA512(PlainText) ) -> hex = hE/Q+F//ZmnoGFNercEp6qyTaIuq7CLbrrUHtFWRKyktueQl97wjjISvqBB0aZC25b79YNs7bLxPT/hKMwySNA==

** 참고 | 일반 10진수(text) 로 변환 시 = ODQ0ZmQwZjg1ZmZmNjY2OWU4MTg1MzVlYWRjMTI5ZWFhYzkzNjg4YmFhZWMyMmRiYWViNTA3YjQ1NTkxMmIyOTJkYjllNDI1ZjdiYzIzOGM4NGFmYTgxMDc0Njk5MGI2ZTViZWZkNjBkYjNiNmNiYzRmNGZmODRhMzMwYzkyMzQ=

image (출처 : https://emn178.github.io/online-tools/base64_encode.html)

관련된 부분은 매뉴얼에 추가 기재하도록 하겠습니다.

miridih-justsmile commented 1 year ago

답변 및 조치 감사합니다. 확인되었습니다.