0

そのため、元々asp.net用に作成されたデータベースにアクセスする必要があるサイトを構築しています。すでにデータベースにあるasp.netサイトと同じユーザー名とパスワードを使用したいと思います。開発者は、デフォルトの認証がasp.netで使用されていると述べました。

データベースからのパスワードの例:sYWPXNvJlVNs8EVZvIQOSaWfQ4I =

データベースからのPasswordSaltの例:ruNTdhelY57ghQsTFz / TIg ==

これが私が試したことです:

<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は、次のように長すぎます。

OUJBOUJENjI0MzEzNjM3M0EwQjk3Nzc3ODIzNUVGMkJCODczOEI0Qg ==

何か案は?

4

1 に答える 1

1

(編集:元の回答がすべての場合に機能したわけではありません。大幅に改訂されました...)

このスレッドはあなたが求めているものかもしれません。要約すると、2つの主な違いは次のとおりです。


<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>
于 2012-11-10T13:24:10.770 に答える