coldfusion中的asp.net sql身份验证
所以,我正在构建一个需要访问最初为asp.net创建的数据库的站点。我想使用与asp.net网站相同的用户名和密码,该网站已经在数据库中。开发人员提到asp.net中使用了默认身份验证 数据库中的密码示例:sywpxnvjlvns8evzviqvosawfq4i= 数据库中的密码salt示例:ruNTdhelY57ghQsTFz/TIg== 以下是我尝试过的:coldfusion中的asp.net sql身份验证,asp.net,sql,coldfusion,Asp.net,Sql,Coldfusion,所以,我正在构建一个需要访问最初为asp.net创建的数据库的站点。我想使用与asp.net网站相同的用户名和密码,该网站已经在数据库中。开发人员提到asp.net中使用了默认身份验证 数据库中的密码示例:sywpxnvjlvns8evzviqvosawfq4i= 数据库中的密码salt示例:ruNTdhelY57ghQsTFz/TIg== 以下是我尝试过的: <cfquery name="auth" datasource="ct"> SELECT userid, Password,
<cfquery name="auth" datasource="ct">
SELECT userid, Password, PasswordSalt from dbo.aspnet_Membership
WHERE userid = '#auth1.userid#'
</cfquery>
<cfset cfHash = toBase64(hash(auth.PasswordSalt & cookie.password, "SHA1"))>
<cfif cfHash eq auth.Password> ...then authenticate etc.
我尝试了几次迭代,但没有成功,结果cfHash太长,如下所示:
Oujboujenji0mzeznjm3mewjk3nzc3odiznuvgmkjcodczoei0qg==
有什么想法吗?编辑:原始答案并非在所有情况下都有效。大幅修改
可能就是你想要的。总之,两个关键区别是:
使用UTF-16LE编码代替UTF-8 CF的默认值。
对salt和密码字节进行编码,这可能是散列函数所做的:
大约三个月前,coldfusion出现了类似的东西。检查ASP安全设置以查看使用了哪个方案。我认为有一个加密和散列实现。我撒谎,它根本没有标记coldfusion,但它在我的活动提要中:是的,我看到了代码,并试图在coldfusion中复制,但没有用…ASP使用散列方法,而不是加密。。。可能就是你想要的。
<cfscript>
thePassword = "password12345";
base64Salt = "l+g9MUcs+cLExeDTNy8M+A==";
// extract bytes of the salt and password
saltBytes = binaryDecode(base64Salt, "base64");
passBytes = charsetDecode(thePassword, "UTF-16LE" );
// next combine the bytes. note, the returned arrays are immutable,
// so we cannot use the standard CF tricks to merge them
ArrayUtils = createObject("java", "org.apache.commons.lang.ArrayUtils");
dataBytes = ArrayUtils.addAll( saltBytes, passBytes );
// hash binary using java
MessageDigest = createObject("java", "java.security.MessageDigest").getInstance("SHA-1");
MessageDigest.update(dataBytes);
theBase64Hash = binaryEncode(MessageDigest.digest(), "base64");
WriteOutput("theBase64Hash= "& theBase64Hash &"<br/>");
</cfscript>