C#에 Base64 인코딩 문자열에서 해시 값을 생성하는 다음 코드가 있습니다.Java Base64 및 HmacSHA256 암호화에 대한 C#
이것은 완벽하게 작동하며 Android 앱의 Java 코드로 변환하려고했습니다. 나는
c# and java - difference between hmacsha256 hash
C# vs Java HmacSHA1 and then base64이 출처 -
에서 참조를 확인하고 자바 -String restServiceVersion = "2017-02-22";
String verb = "post";
String resourceType = "docs";
String resourceId = "dbs/ToDoList/colls/Items";
String dateString = org.apache.http.impl.cookie.DateUtils.formatDate(new Date(System.currentTimeMillis()));
String gmtIndex = "GMT";
int index = dateString.indexOf(gmtIndex);
String dateStringFinal = dateString.substring(0, index + 3).toLowerCase();
String payLoad = verb +"\n" + resourceType + "\n" + resourceId + "\n" + dateStringFinal + "\n\n";
System.out.println(payLoad);
String secretAccessKey = MASTER_KEY;
String data = payLoad;
byte[] secretKey = Base64.decode(secretAccessKey, Base64.DEFAULT);
SecretKeySpec signingKey = new SecretKeySpec(secretKey, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] bytes = data.getBytes("UTF-8");
byte[] rawHmac = mac.doFinal(bytes);
String authToken = "type=master&ver=1.0&sig=" + Base64.encodeToString(rawHmac, Base64.DEFAULT);
C 번호와 일치하지 않는 자바에서 생성 된 authToken
값에 코드 아래 썼다. 또한 Base64 디코딩에서 생성 된 바이트 배열이 다릅니다.
올바른 방법인지 확실하지 않습니다. 누군가 좀 봐 주시겠습니까? 내가 필요한 것은 위의 C# 코드를 Java for Android 앱으로 변환하는 것입니다.
그래서 값이 일치하지 않습니다. 얼마나 유익한 지 ..... ** NOT ** – Andreas
base64 디코딩 후의 키 바이트가 다른 경우 sha256 해시도 분명히 다릅니다. 소스 base64로 인코딩 된 키가 둘 모두에서 동일하다는 것을 절대적으로 100 % 확실합니까? 주어진 플랫폼에 따라 어떤 결과가 나오는지 보여줄 수 있습니까? (사용중인 정확한 키가 로컬 테스트 용도로만 사용되는 경우 해당 키를 사용할 수 있습니다). –
@DylanNicholson 예 소스 키와 다른 매개 변수는 동일합니다. 내가 제대로 만들었는지 걱정했다. –