C#.NetとOracle 10gの両方でSHA1アルゴリズムに基づいて一部の文字列を暗号化したいとします。 C#.NETでC#.NetとOracle間で異なる暗号化結果を取得
マイアルゴリズム:オラクルで
string salt = "123";
System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create();
byte[] preHash = System.Text.Encoding.UTF32.GetBytes(salt);
byte[] hash = sha.ComputeHash(preHash);
string password = System.Convert.ToBase64String(hash);
password = password.Substring(0, 8);
// password value is: "7yP7/lkJ"
:
Create Or Replace Function Sha1(P_Value Varchar2,P_Length Number) Return Varchar2
Is
P_String Varchar2(2000) := P_Value ;
L_Hash_Value_Raw Raw (100);
Lv_Hash_Value_Varchar Varchar2 (40);
Begin
L_Hash_Value_Raw := Dbms_Crypto.Hash (Src => Utl_Raw.Cast_To_Raw(P_String),
Typ => Dbms_Crypto.Hash_Sh1);
-- Convert Into Varchar2
Select Utl_Raw.Cast_To_Varchar2(Utl_Encode.Base64_Encode(L_Hash_Value_Raw))
Into Lv_Hash_Value_Varchar
From Dual;
Lv_Hash_Value_Varchar := Substr(Lv_Hash_Value_Varchar,0,P_Length);
Return Lv_Hash_Value_Varchar;
End;
Oracleのinvokation:
select SHA1('123', 8) from dual; -- Result: "QLOAFWMI"
多分私の一般的な質問は、Oracle(PL/SQL)と.Netの暗号化/ raw/hexレベルの違いは何ですか?私は答えがこの特定の問題を解決するだろうと思う。
ちょうどあなたが知っている、encyptionとハッシングの違いがあります。 SHA1は*ハッシング*アルゴリズムです。 –
LordCover、問題をもう一度見てみる前に、アレクシーの答えを試すことができますか? –
さて、あなたは今日、3回目のハッシュ関数を使ってパスワードをハッシュした第三者です。それをしないでください。そして、なぜあなたはdbサーバー上でパスワードハッシングを行うのですか? – CodesInChaos