トリガーを使用して別のテーブルにハッシュ値を格納できるように、sha-256を使用してトリガー内のパスワードを暗号化またはハッシュするにはどうすればよいですか?また、どうすれば解読できますか?
残念ながらDBMS_CRYPTO
Oracle 11.2では、160ビットのSHA1( ドキュメントリンク )のみをサポートしています。 。
DBMS_CRYPTO
Oracle 12.1ではSHA2をサポートしていますHASH_SH256
( ドキュメントリンク )、必要なことを行います。
SHA2のいくつかの無料の実装は、グーグルですぐに使えます。 このブログ投稿 など。
ハッシュ化されたパスワードの復号化については?あなたはハッシュを理解していないと思います。ハッシュは、ブルートフォースまたは Rainbow Tables を使用しない限り、一方向です。パスワードが正しいかどうかを確認するには、ハッシュして、保存されているハッシュと比較します。
Sha256パックを使用した私の実装
Function hmac_sha256
(
ptext Varchar2,
pkey Varchar2
) Return Varchar2
Is
-- pad const
c_opad Raw(1) := '5c';
c_ipad Raw(1) := '36';
c_kpad Raw(1) := '00';
--SHA256 block size 512 bit
c_blocksize Integer := 64;
--local var, length equals to blocksize
l_opad Raw(64);
l_ipad Raw(64);
l_key Raw(64);
Begin
l_opad := utl_raw.copies(c_opad, c_blocksize);
l_ipad := utl_raw.copies(c_ipad, c_blocksize);
If utl_raw.length(utl_raw.cast_to_raw(pkey)) > c_blocksize Then
l_key := utl_raw.cast_to_raw(sha256.encrypt(pkey));
Else
l_key := utl_raw.cast_to_raw(pkey);
End If;
l_key := l_key ||
utl_raw.copies(c_kpad, c_blocksize - utl_raw.length(l_key));
Return sha256.encrypt_raw(utl_raw.bit_xor(l_key, l_opad) ||
sha256.encrypt_raw(utl_raw.bit_xor(l_key, l_ipad) || utl_raw.cast_to_raw(ptext))
);
End;