C# .Net과 Oracle 10g의 SHA1 알고리즘을 기반으로 일부 문자열을 암호화하려고합니다.C# .Net과 Oracle간에 다른 암호화 결과 얻기
C# 닷넷에서 내 알고리즘 : 오라클에서
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;
오라클의 invokation :
select SHA1('123', 8) from dual; -- Result: "QLOAFWMI"
내 일반적인 질문은 오라클 (PL/SQL)과 .Net의 암호화/원시/16 진수 수준의 차이점은 무엇입니까? 그 대답은이 특정한 문제를 해결할 것이라고 생각합니다.
잘 알고 있듯이, encyption과 hashing 사이에는 차이점이 있습니다. SHA1은 * 해싱 * 알고리즘입니다. –
LordCover, 문제를 다시 살펴보기 전에 Alexey의 대답을 시도해 볼 수 있습니까? –
젠장, 당신은 오늘 세 번째 사람입니다. 해시 암호는 단일 반복 해시 함수를 사용합니다. 그러지 마. 왜 DB 서버에서 암호 해싱을 할 것입니까? – CodesInChaos