1

最近、Oracle 暗号化について質問しました。自分自身で解決策を見つける過程で、特定のタスクの暗号化 (難読化) をアプリケーション側に移動することにしました。

私の問題は、データベースがすでに特定の方法でデータを暗号化しており、その機能を複製する Java コードが必要であるため、あるシステムで暗号化されたテキストを別のシステムで復号化したり、その逆を行ったりできることです。

暗号化を DB がすでに行っていることと互換性を持たせたいのですが、Oracle が行っていることを正確に説明しているドキュメントが見つかりませんでした。これをJavaで複製するにはどうすればよいですか?

dbms_obfuscation_toolkit.DESEncrypt(
  input_string => v_string,
  key_string => key_string,
  encrypted_string => encrypted_string );
RETURN UTL_RAW.CAST_TO_RAW(encrypted_string);

何を試しても、Java DES 暗号化は Oracle のものとは異なるようです。

4

2 に答える 2

2

私はこれがうまくいくことを発見しました:

KeySpec ks = new DESKeySpec(new byte[] {'s','e','c','r','e','t','!','!'});
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey sk = skf.generateSecret(ks);
Cipher c = Cipher.getInstance("DES/CBC/NoPadding");
IvParameterSpec ips = new IvParameterSpec(new byte[] {0,0,0,0,0,0,0,0});
c.init(Cipher.ENCRYPT, sk, ips);
// or
c.init(Cipher.DECRYPT, sk, ips);

欠落していたのは、8 つのゼロでなければならない初期化ベクトル (ips) でした。Java で null を使用すると、別の結果が得られます。

于 2008-09-22T15:30:56.620 に答える
0

データベースで Java を使用することは、コード (したがって結果) が同一であることを保証する (はずである!) 別のアプローチでした。

于 2008-09-22T17:27:31.723 に答える