В ColdFusion как я могу сопоставить опубликованный пароль с зашифрованным паролем SHA256 в моей таблице? - PullRequest
2 голосов
/ 04 марта 2012

Я создаю форму входа в систему с помощью ColdFusion, но я не могу определить синтаксис для проверки пароля в моей таблице, которая зашифрована с использованием SHA256. Я исследовал это и пока нашел только сложные ответы, в основном не связанные с тем, что мне нужно.

Вот код, который у меня есть для моего запроса:

   <cfquery name="qVerify" datasource="MyDSN">
SELECT  *
   FROM cryptuser
   WHERE firstname = '#firstname#'
   AND   password = '#password#'
</cfquery>

Таким образом, пароль, введенный и опубликованный в форме, должен соответствовать паролю, зашифрованному в моей таблице. Кто-нибудь знает, возможно ли это?

Большое спасибо.

Ответы [ 2 ]

5 голосов
/ 05 марта 2012

Для шифрования с помощью SHA-256 вы используете не функцию encrypt (), а функцию hash () (SHA - односторонний хэш):

<cfset EncryptedPassword = Hash(form.password, "SHA-256") />

Я полагаю, что CF вернет хэш верхнего регистра, поэтому убедитесь, что вы сравниваете его с верхним регистром пароля, зашифрованного в базе данных:

AND UPPER(password) = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#EncryptedPassword#" />

Также следите за кодировкой! Возможно, что данные в базе данных могут иметь кодировку, отличную от кодировки по умолчанию (например, iso-8859-1, а не utf-8).

Надеюсь, это поможет.

1 голос
/ 04 марта 2012

вам просто нужно зашифровать пароль, введенный пользователем, а затем использовать эту переменную в вашем запросе.

<cfset EncryptedPassword = Encrypt(form.password,'your key','SHA-256')>

<cfquery name="qVerify" datasource="MyDSN">
SELECT  *
FROM cryptuser
WHERE firstname = <cfqueryparam cfsqltype="cf_sql_varchar" value="#firstname#">
AND   password = <cfqueryparam cfsqltype="cf_sql_varchar" value="#EncryptedPassword#">
</cfquery>
...