2016-07-05 24 views
-3
Function EncryptPassword(vPwd) 
    vTempPwd = "" 
    EncryptPassword = "" 
    For i = 1 To Len(vPwd) 
    vTempPwd = vTempPwd & Chr((255 - Asc(Mid(vPwd, i, i)))/2) 
    Next 
    For i = Len(vPwd) + 1 To 10 
    vTempPwd = vTempPwd & CStr(i - Len(vPwd)) 
    Next 
    EncryptPassword = vTempPwd 
End Function 

私は上記の 暗号化 暗号に 解読 解読関数を書くように求めてきました。 アイデア復号化(解読)機能(暗号)

+2

あなたは数日前にアドバイスを無視しましたか? - どの暗号化の形式がこのasp関数で使われているのか?](http://stackoverflow.com/q/38127127/692942)。私はそれを言いました、そして今私はそれを言いますが、暗号化ではなく、文字の置き換えが難読化され、簡単に破られるということです。 **任意の** Webアプリケーションでこれを使用すべきではありません。 – Lankymart

+3

@Lankymart:私の上司は、いつも愚かなことをするように私に頼みます。時々、私は彼の棚から彼と話すことができます。他の時代、私は自分のプライドを飲み込んで自分のやり方でやらなければなりません。それは私のものではなく、彼の会社です。あなたが同じ船にいないなら、あなたの祝福を数えてください。しかし、それほど幸運ではない私たちの人たちから離れる。 – Martha

+1

@Marthaは愚かなことをすることを頼まれていますが、会社が責任を負うことになる可能性がある危険なことをするよう求められていることは、まったく別です。ユーザーがパスワードを暗号化するための暗号化を悪用している場合、そのセキュリティは何ですか?顧客の詳細、支払い情報など...ちょうどそれをしないとあなたの上司に理由を説明してください。これ以外にも、質問/回答がOPだけに利益をもたらすインターネットコミュニティがあるので、明らかにそうでないときに暗号化と考えている人はいないだろう。 – Lankymart

答えて

1

次の関数は、EncryptPassword関数に渡すと元のパスワードと同じ暗号化文字列で終わる文字列のパスワードを返します。

Function DecryptPassword(vPwd) 
    vTempPwd = "" 
    DecryptPassword = "" 
    For i = 1 To Len(vPwd) 
    vTempPwd = vTempPwd & Chr((255 - Asc(Mid(vPwd, i, 1)) * 2)) 
    Next 
    DecryptPassword = vTempPwd 
End Function 

注:各文字は、少なくとも1つの「衝突」の文字を持っているとして、それは必ずしも、元のパスワードとまったく同じ文字列をあなたに戻って与えることはありませんそれは、彼らが同じ値に暗号化しますということです。また、EncryptPassword関数は少なくとも10文字にパディングしますので、元のパスワードが短ければ、同じ文字列に暗号化する10文字の文字列になります。以下は

は私がします。cscript

pw1 = "password1234" 
pwC1 = EncryptPassword(pw1) 

pw2 = DecryptPassword(pwC1) 
pwC2 = EncryptPassword(pw2) 

If pwC1 = pwC2 Then 
    WScript.Echo pw1 & " and " & pw2 & " cipher to the same value off " & pwC1 
else 
    WScript.Echo pw1 & " chipher is " & pwC1 & " and " & pw2 & " cipher is " & pwC2 
End If 

Function EncryptPassword(vPwd) 
    vTempPwd = "" 
    EncryptPassword = "" 
    For i = 1 To Len(vPwd) 
    vTempPwd = vTempPwd & Chr((255 - Asc(Mid(vPwd, i, i)))/2) 
    Next 
    For i = Len(vPwd) + 1 To 10 
    vTempPwd = vTempPwd & CStr(i - Len(vPwd)) 
    Next 
    EncryptPassword = vTempPwd 
End Function 

Function DecryptPassword(vPwd) 
    vTempPwd = "" 
    DecryptPassword = "" 
    For i = 1 To Len(vPwd) 
    vTempPwd = vTempPwd & Chr((255 - Asc(Mid(vPwd, i, 1)) * 2)) 
    Next 
    DecryptPassword = vTempPwd 
End Function 

注意を使用して.vbsファイルを実行してテストした完全なスクリプトです:元の質問のコメントのノートに言われたとおりAsc(Mid(vPwd, i, i))もAsc関数としてAsc(Mid(vPwd, i, 1))することができとにかく最初の文字だけを解析します。