سؤال

لقد طرحت مؤخرًا سؤالاً حول Oracle Encryption.على طول الطريق لإيجاد حل لنفسي، قررت نقل التشفير (حسنًا، التشويش) إلى جانب التطبيق لمهام معينة.

مشكلتي هي أن قاعدة البيانات تقوم بالفعل بتشفير البيانات بطريقة معينة وأحتاج إلى كود Java لتكرار هذه الوظيفة، بحيث يمكن فك تشفير النص المشفر بواسطة نظام واحد بواسطة النظام الآخر والعكس صحيح.

أريد أن يكون التشفير متوافقًا مع ما كانت تفعله قاعدة البيانات بالفعل ولكن لم أتمكن من العثور على الوثائق التي تصف بالضبط ما تفعله Oracle.كيف يمكنني تكرار هذا في جافا؟

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.

هل كانت مفيدة؟

المحلول

لقد وجدت هذا يعمل:

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);

القطعة المفقودة هي متجه التهيئة (ips) الذي يجب أن يكون 8 أصفار.عندما تستخدم null في Java، فإنك تحصل على شيء مختلف.

نصائح أخرى

كان استخدام Java في قاعدة البيانات بمثابة نهج آخر من شأنه (يجب!) أن يضمن أن الكود (وبالتالي النتائج) سيكون متطابقًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top