저는 Integrity Measurement Architecture (IMA) (https://sourceforge.net/p/linux-ima/wiki/Home/)를 사용하여 작업하고 있으며, C에서 이미 수행 한 작업을 Java로 작성하려고하고 있으며 위의 링크 된 페이지에서 설명했습니다.SHA1을 사용하여 여러 값으로부터 집합체를 계산하십시오.
PCR-00 : 07274edf7147abda49200100fd668ce2c3a374d7
PCR-01 : 48dff4fbf3a34d56a08dfc1504a3a9d707678ff7
PCR-02 : 53de584dcef03f6a7dac1a240a835893896f218d
PCR-03 : 3a3f780f11a4b49969fcaa80cd6e3957c33b2275
측정 목록에서 시작PCR-04 : acb44e9dd4594d3f121df2848f 572e4d891f0574
PCR-05 : df72e880e68a2b52e6b6738bb4244b932e0f1c76
PCR-06 : 585e579e48997fee8efd20830c6a841eb353c628
PCR-07 : 3a3f780f11a4b49969fcaa80cd6e3957c33b2275
내가이 모든 측정의 집계를 계산해야합니다. 이 작업을 수행하는 C 코드는 다음과 같습니다
는SHA1_Init(&c);
for (i = 0; i < NUM_PCRS; i++) {
if (DEBUG) {
printf("PCR-%2.2x: ", i);
display_sha1_digest(pcr[i].digest);
}
SHA1_Update(&c, pcr[i].digest, 20);
}
SHA1_Final(boot_aggregate, &c);
이 코드를 사용하여 결과는 다음과 같습니다 b5a166c10d153b7cc3e5b4f1eab1f71672b7c524
내가 그렇게이 자바 라인을 writed :
String pcr0 = "07274edf7147abda49200100fd668ce2c3a374d7";
String pcr1 = "48dff4fbf3a34d56a08dfc1504a3a9d707678ff7";
String pcr2 = "53de584dcef03f6a7dac1a240a835893896f218d";
String pcr3 = "3a3f780f11a4b49969fcaa80cd6e3957c33b2275";
String pcr4 = "acb44e9dd4594d3f121df2848f572e4d891f0574";
String pcr5 = "df72e880e68a2b52e6b6738bb4244b932e0f1c76";
String pcr6 = "585e579e48997fee8efd20830c6a841eb353c628";
String pcr7 = "3a3f780f11a4b49969fcaa80cd6e3957c33b2275";
MessageDigest hash = MessageDigest.getInstance("SHA-1");
byte[] firstToLastDigest;
hash.reset();
hash.update(pcr0.getBytes("UTF-8"));;
hash.update(pcr1.getBytes("UTF-8"));
hash.update(pcr2.getBytes("UTF-8"));
hash.update(pcr3.getBytes("UTF-8"));
hash.update(pcr4.getBytes("UTF-8"));
hash.update(pcr5.getBytes("UTF-8"));
hash.update(pcr6.getBytes("UTF-8"));
hash.update(pcr7.getBytes("UTF-8"));
firstToLastDigest = hash.digest();
digestStr = javax.xml.bind.DatatypeConverter.printHexBinary(firstToLastDigest);
System.out.println(digestStr);
그러나 나는군요 "를 EA3487AC70DC445A2E608ED44DC550366F2C6716 "예상 된 결과 대신 :"b5a166c10d153b7cc3e5b4f1eab1f71672b7c524 ". 어떠한 제안?
값의 16 진수 표현을 요약합니다. 다시 실제 값으로 변환해야합니다 (첫 번째 바이트가 0x07이고 두 번째 바이트가 0x27 등인 바이트 배열) – RealSkeptic
다이제스트를 만들기 전에 변환해야합니까? –