У меня есть небольшая программа в java и в delphi 5, обе они предназначены для обработки сертификата.
В delphi я использую компонент indy 9: TIdX509, в этом объекте есть метод получения отпечатка пальца в виде строки, я нигде не нашел, как вычисляет TIdX509. Я мог бы просто обнаружить, что он не должен иметь 16 байтов, например:
72:7F:8D:DF:8D:5F:61:A3:9E:DF:38:CA:C5:5B:18:0A 16 групп по 2.
Поэтому я проверил на Java, чтобы увидеть, какой отпечаток будет рассчитан, я выполнил свою функцию на основе этого ответа Как рассчитать отпечаток SHA-1 сертификата X.509?
public static String generateFingerPrint(X509Certificate cert)
throws CertificateEncodingException, NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
byte[] hash = digest.digest(cert.getEncoded());
final char delimiter = ':';
// Calculate the number of characters in our fingerprint
// ('# of bytes' * 2) chars + ('# of bytes' - 1) chars for delimiters
final int len = hash.length * 2 + hash.length - 1;
// Typically SHA-1 algorithm produces 20 bytes, i.e. len should be 59
StringBuilder fingerprint = new StringBuilder(len);
for (int i = 0; i < hash.length; i++) {
// Step 1: unsigned byte
hash[i] &= 0xff;
// Steps 2 & 3: byte to hex in two chars
// Lower cased 'x' at '%02x' enforces lower cased char for hex
// value!
fingerprint.append(String.format("%02x", hash[i]));
// Step 4: put delimiter
if (i < hash.length - 1) {
fingerprint.append(delimiter);
}
}
return fingerprint.toString();
}
Результат, который я получаю от этого, выглядит примерно так: 56:ee:54:2b:cb:d3:8a:e2:1d:13:e1:f3:9c:f6:8f:3b:69:18:95:0a - 20 групп по 2 человека
Я также нашел этот веб-сайт: Рассчитать отпечаток пальца, и он также сгенерируйте отпечаток пальца с 20 группами по 2, а не с 16.
Итак, мой вопрос: почему независимый компонент TIdX509 генерирует отпечаток пальца всего с 16 группами по 2, когда должно быть 20?