Отпечаток сертификата DER отличается от openssl [keystore] [duplicate]

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

Вы определяете строку, используя одинарные кавычки, и PHP не анализирует строки с разделителями одиночной кавычки. Чтобы получить переменную интерполяцию, вам нужно использовать двойные кавычки или конкатенацию строк (или их комбинацию). См. http://php.net/manual/en/language.types.string.php для получения дополнительной информации.

Также вы должны проверить, что mysql_query вернул действительный ресурс результата, иначе fetch_ *, num_rows и т. д. не будут работать с результатом, поскольку это не результат! IE:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

if( $result === FALSE ) {
   trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR);
} else {
   while( $row = mysql_fetch_array($result) ) {
      echo $row['username'];
   }
}

http://us.php.net/manual/en/function.mysql-query.php для получения дополнительной информации.

2
задан VdS 3 November 2015 в 11:31
поделиться

1 ответ

Различные отпечатки SHA1 вызваны разными кодировками сертификата подписи кода.

Первый отпечаток пальца (keytool) вычисляется по байтам сертификата точно так же, как они содержатся в файле PKCS # 7 META-INF/CERT.RSA. Длина подписи (сертификата, а не подписи кода) кодируется здесь в двух байтах, где на самом деле достаточно одного байта. Чтобы увидеть это, мы должны взглянуть на дамп ASN.1 CERT.RSA. Есть несколько программ, которые могут это сделать, но я рекомендую dumpasn1 / GUIdumpASN Питера Гутмана. Соответствующая часть такова:

    <06 09>
532   9:             OBJECT IDENTIFIER
       :               sha1WithRSAEncryption (1 2 840 113549 1 1 5)
    <05 00>
543   0:             NULL
       :             }
    <03 82 00 81>
545 129:           BIT STRING    
       :             65 26 30 0C 41 32 63 75    e&0.A2cu
       :             2F B7 DF 9A 96 37 72 1B    /....7r.

Байты 82 00 81 - это байты длины BITSTRING (который является сигнатурой сертификата), закодированный в длинной форме .

В соответствии с отличительными правилами кодирования DER необходимо использовать « кратчайшее возможное кодирование длины », что было бы 81 81. Это означает, что сертификат подписи кода не полностью закодирован DER.

Когда вы экспортировали сертификат с помощью openssl, он перекодировал сертификат в действительный DER:

    <03 81 81>
489 129:   BIT STRING    
        :     65 26 30 0C 41 32 63 75    e&0.A2cu
        :     2F B7 DF 9A 96 37 72 1B    /....7r. 

. Поэтому Значение хеша (отпечаток пальца) сертификата отличается, оно изменилось.

Ни keytool, ни openssl не сделали что-то неправильно. Точка DER-кодирования состоит в том, что она генерирует всегда точно такое же представление байтов структур ASN.1.

Программное обеспечение, вызвавшее эту проблему, является инструментом, с помощью которого был создан сертификат с неправильным кодом подписания.

1
ответ дан Omikron 28 August 2018 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: