Closed miridih-justsmile closed 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 "";
}
}
제가 시도한 알고리즘은 위와 같이 구현하였습니다.
Hex 인코딩이 필요합니다.
[ P_CHKFAKE 검수 ]
** 참고 | 일반 10진수(text) 로 변환 시 = ODQ0ZmQwZjg1ZmZmNjY2OWU4MTg1MzVlYWRjMTI5ZWFhYzkzNjg4YmFhZWMyMmRiYWViNTA3YjQ1NTkxMmIyOTJkYjllNDI1ZjdiYzIzOGM4NGFmYTgxMDc0Njk5MGI2ZTViZWZkNjBkYjNiNmNiYzRmNGZmODRhMzMwYzkyMzQ=
(출처 : https://emn178.github.io/online-tools/base64_encode.html)
관련된 부분은 매뉴얼에 추가 기재하도록 하겠습니다.
답변 및 조치 감사합니다. 확인되었습니다.
위 설명대로 plainText가 "1000201505152087997041431678259123456789012345678901234567890" 일때
SHA512의 값은 "844fd0f85fff6669e818535eadc129eaac93688baaec22dbaeb507b455912b292db9e425f7bc238c84afa810746990b6e5befd60db3b6cbc4f4ff84a330c9234" 가 됩니다. (아래 이미지 참고)
이후 Base64로 encode하라는 지침에 따라 encode해도 "hE/Q+F//ZmnoGFNercEp6qyTaIuq7CLbrrUHtFWRKyktueQl97wjjISvqBB0aZC25b79YNs7bLxPT/hKMwySNA==" 와 값은 나오지 않습니다.
또한 "hE/Q+F//ZmnoGFNercEp6qyTaIuq7CLbrrUHtFWRKyktueQl97wjjISvqBB0aZC25b79YNs7bLxPT/hKMwySNA=="를 decode하면 알 수 없는 문자열만 출력됩니다.
무엇이 잘못된 것인가요? 제가 뭔가 순서를 다르게 한 것일까요?