الانتقال إلى المحتوى

كيف يمكنني ان اعمل Encrypion للبيانات الخاصة بالمر تبات اي تشفيرها عند عرضها


nesso

Recommended Posts

السلام عليكم ورحمة الله وبركاتة
كيف يمكنني ان اعمل Encrypion للبيانات الخاصة بالمر تبات اي تشفيرها عند عرضها وعرضها بالشكل الصحيح بكلمة مرور
الرجاء المساعدة على وجة السرعة

رابط هذا التعليق
شارك

  • بعد 3 أسابيع...

بالنسبة لكلمة مرور فأنت ممكن تعملها للأسكيمة كلها

SQL> conn system / l
Connected.
SQL> alter user scott identified by l ;

User altered.


.... اما تشفير البيانات فأستخدم ال Translate Function اللى فى السكويل :-

SQL> SELECT TRANSLATE('SECRET MESSAGE: MEET ME IN THE PARK',
 2  'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
 3  'EFGHIJKLMNOPQRSTUVWXYZABCD')
 4  FROM dual;

TRANSLATE('SECRETMESSAGE:MEETMEINTH
-----------------------------------
WIGVIX QIWWEKI: QIIX QI MR XLI TEVO



يبقى كده الرسالة اللى تحتوى هذه الكلمات
(( SECRET MESSAGE: MEET ME IN THE PARK ))
تحولت الى
(( WIGVIX QIWWEKI: QIIX QI MR XLI TEVO ))

انت بقى ترسل لصديقك الحروف اللى يحول بيها ... بمعنى انك تقوله
" حول يا صديقى ال
'EFGHIJKLMNOPQRSTUVWXYZABCD'
الى
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
و بكده الرسالة تظهر قدامه ذى ما كانت فى الاول "

يبقى كده مفروض صديقك هيعمل الكود التالى لفك الرسالة المشفرة :-

SQL> SELECT TRANSLATE('WIGVIX QIWWEKI: QIIX QI MR XLI TEVO',
 2  'EFGHIJKLMNOPQRSTUVWXYZABCD',
 3  'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
 4  FROM dual;

TRANSLATE('WIGVIXQIWWEKI:QIIXQIMRXL
-----------------------------------
SECRET MESSAGE: MEET ME IN THE PARK




اتمنى ان تكون الفكرة وصلت بوضوح ..... مع تمنياتى للجميع بالتوفيق

رابط هذا التعليق
شارك

شكراً للأخ ( hanyfreedom ) بس أخي ممكن توضيح أكثر وإعطاء مثال أبسط وأدق وشرح دقيق ؟؟؟


لكن أخي أنا لدي فكرة أخري وهي أن أقم بتخزين البيانات بصورة مشفرة ، صحيح هذه الطريقة غير جيدة لكل الحقول لكنها جيدة للحقول النصية !!!

بمعني أدق ، إذا كان لدينا حقل رقمي مثل ( الراتب ) أو حقل تاريخ مثل ( تاريخ الميلاد / تاريخ التعيين ) ،، في هذه الحالة يجب علينا أن نقم بإنشاء هذا الحقل من نوع نصي VarChar2!!

السبب في ذلك لأن فكرتي تتطلب إيجاد قيمة الـ Ascii واللعب بها كما نشاء ، وحتي لا أطيل علي حضراتكم إليكم مثال بسيط .

نفرض أن لدينا جدول Emp وبه حقل نصي يمثل إسم الموظف Emp_Name ، المطلوب بالضبط هو إدراج وقراءة محتويات هذا الحقل بصورة مشفرة بطريقة مستمرة وذلك بإستخدام الـ Function و الـ procedures كما يلي :

1- إنشاء Function بسيط لتشفير البيانات :


Create Or Replace Function Get_DeCode(ID_String   VarChar2) Return VarChar2
As
  p_DeCode  VarChar2(500);
  ID_Loop	 Number;
Begin
  p_DeCode := '';
 
  For ID_Loop In 1 .. Length(ID_String)
  Loop
  p_DeCode := p_DeCode || Chr(255 - Ascii(SubStr(ID_String,ID_Loop,1)));
  End Loop;
  Return p_DeCode;
End;
/



Select Get_DeCode('Ahmed') From Tab Where RowNum = 1;



وبعد ذلك إذا كنا نرغب في إدراج سجل كما يلي :

Insert Into Emp(Emp_Name) Values(Get_DeCode('Ahmed'));





شكراً

رابط هذا التعليق
شارك

Using the TRANSLATE() Function



TRANSLATE(x, from_string, to_string) converts the occurrences of characters in from_
string found in x to corresponding characters in to_string. The easiest way to understand
how TRANSLATE() works is to see some examples.
The following example uses TRANSLATE() to shift each character in the string SECRET
MESSAGE: MEET ME IN THE PARK by four places to the right: A becomes E, B becomes F,
and so on:

SELECT TRANSLATE('SECRET MESSAGE: MEET ME IN THE PARK',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'EFGHIJKLMNOPQRSTUVWXYZABCD')
FROM dual;

TRANSLATE('SECRETMESSAGE:MEETMEINTH
-----------------------------------
WIGVIX QIWWEKI: QIIX QI MR XLI TEVO


The next example takes the output of the previous example and shifts the characters four
places to the left: E becomes A, F becomes B, and so on:

SELECT TRANSLATE('WIGVIX QIWWEKI: QIIX QI MR XLI TEVO',
'EFGHIJKLMNOPQRSTUVWXYZABCD',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
FROM dual;

TRANSLATE('WIGVIXQIWWEKI:QIIXQIMRXL
-----------------------------------
SECRET MESSAGE: MEET ME IN THE PARK

رابط هذا التعليق
شارك

انا كنت عاوز اقول بعض الملاحظات على كود اخى العزيز MMA

اولاً :-

بالنسبة لمتغير ال ID_Loop الذى ذكرته فى ال Declaration Section فهو ليس له قيمة على الاطلاق ،
حيث ان ال ID_Loop المستخدمه فى ال loop هى خاصة بال loop فقط و ولا تأخذ قيمتها من اى متغير فى ال Declaration Section .

جرب و احذفها و هتلاقى ال Function متأثرتش خالص .

ثانياً :-

بالنسبة لطريقة فك الشفرة فأنت لم تذكر عنها شىء ...... كان يفترض ان تذكر ان نفس ال function تقوم بعملية فك التشفير .

و هذه مراجعة منى للطريقة كلها :-

CREATE OR REPLACE FUNCTION get_decode (id_string VARCHAR2)
  RETURN VARCHAR2
AS p_decode   VARCHAR2 (500);
--   id_loop    NUMBER; ( this variable completely pointless ) . 
BEGIN p_decode := '';

  FOR id_loop IN 1 .. LENGTH (id_string)
  LOOP
     p_decode :=
              p_decode || CHR (255 - ASCII (SUBSTR (id_string, id_loop, 1)));
  END LOOP;

  RETURN p_decode;
END;
/

CREATE TABLE TEST (NAME VARCHAR2(15));

INSERT INTO TEST VALUES (get_decode ('Hany'));

SELECT * FROM TEST;
---------

NAME
---------------
·ž‘†

------ now we we decrypt the encryption data that stored in test table :-
UPDATE TEST SET NAME = get_decode (NAME);

SELECT * FROM TEST;
------------

NAME
---------------
Hany

---- I hope every thing clear now ......  all my grateful to MMA , the owner
---- of the get_decode function .




اتمنى انك يكون نقدى نقد بناء وليس ان يفهم على انه نقد لرصد الاخطاء ...... و الله يعلم ما فى القلوب و النيات .

أخوك هانى

رابط هذا التعليق
شارك

اتمنى انك يكون نقدى نقد بناء وليس ان يفهم على انه نقد لرصد الاخطاء ...... و الله يعلم ما فى القلوب و النيات .

أخوك هاني


لا يا أخي كلامك هذا ينال مني كل إحترام وبالعكس كلامك صحيح ، بس أخي أنا فعلياً هذا ما كنت أفعلة في الفيجوال 6.0 ، وهذا فكر برمجة نوافذ وليست قواعد بيانات !!!

فالفنكشن هدفة هو أخذ قيمة نصية وتحويلها الي قيمة مشفرة كما يلي :

Insert Into Emp(Emp_Name) Values(Get_DeCode('Ahmed'));



أما في حالة قراءة هذه القيمة فيجب علي فك التشفير ، ولفك التشفير يمكننا إستدعاء نفس الفانكشن كما يلي :

Select Get_DeCode(Emp_Name) As Emp_Name From Emp




لكن أخي أنا لم أشفر شيء علي الإطلاق ، كل ما فعلتة هو إيجاد مقلوب الحرف المدخل !!!

بمعني أدق ، كل مفتاح موجود بلوحة المفاتيح Key Board تحتوي علي كود Ascii مخزن بنظام التشغيل ، حيث أن كل مفتاح يحتوي علي كود خاص ، علي سبيل المثال المفتاح ( A ) رقمة الكودي هو 65 ، أما حرف ( a ) فكودة 67 ، أما حرف ( ش ) فكودة ( 212 ) !!!

بمعني أدق أن لكل مفتاح له أكثر من كود Ascii بحيث أن لكل حرف يحتوي علي كود Ascii !!!

حاول أخي تعد عدد المفاتيح بلوحة المفاتيح أو عدد الحروف والإشارات التي يمكننا كتابتها علي Notepad مثلاً ستجدها 255 حرف !!!!

الرقم من 1 الي 9
الحروف الأجنبية كابيتال وسمول من a الي z أو من A الي Z
والحروف العربية بما فيها من تشكيلات ( الضمة والكسرة والفتحة والتنوين و .... الي آخرة ) .
الإشارات الإضافية مثل !~#$%^&*()_+=-|\/ .

حاول تعد كل هذا وستجدها 255 حرف أو إشارة !!!

فلعبتي بالغرض Get_DeCode هي لعبة خفيفة جداً ويستخدمها الكثير من المبرمجين لإخفاء شكل البيانات عن عيون المستخدمين خصوصاً المستخدم العادي !!!

فقمت بجلب كود آسكي لكل حرف وطرحها من 255 ، فمثلاً لو كان الحرف هو A الذي يحمل كود آسكي 65 سيتم طرحة كما يلي :

X := 255 - Ascii('A');
X := 255 - 65;
X := 190;



بعد ذلك قمت بتحويل القيمة الرقمية المرتجعة ( 190 ) الي قيمة نصية كما يلي :

X := Chr(190);



بحيث أن يتم إدراج علامة الثلاثة أرباع ( 3 ÷ 4 ) !!!



أما بخصوص فك التشفير فيتم جلب القيمة النصية من جديد وطرحها من 255 بحيث أن يتم إرتجاع الكود الصحيح كما يلي :

X := Chr(255 - 190);
X := Chr(65);



وهكذا

ياريت يكون الفكرة جميلة وتنال إعجابكم

----------------------------------------------------------------------------------------------------------------------------

أما بخصوص الـ ID_Loop فالهدف منه هو إجراء Loop علي طول القيمة النصية المدخلة بحيث أن أجلب حرف حرف وأشفر كل حرف علي حدة ، والهدف الأساسي منه هو معرفة بداية موقع الحرف الجديد ، أما نهايتة فهو الرقم ( 1 ) بحيث أن أجلب حرف حرف .

أخي تذكر الهدف الأساسي هو معرفة رقم الـ Loop الحالي هل 1 أم 2 أم 3 أم 4 أم ...... الي آخرة .


أنظر التالي لتتضح لك فكرتي :

Set ServerOutput On
Declare
 ID_Loop	Number;
 ID_Name  VarChar2(20) := 'Ahmed';
Begin
 For ID_Loop In 1 .. Length(ID_Name) Loop
DBMS_Output.Put_Line(ID_Loop || ' : ' || SubStr(ID_Name,ID_Loop,1));
 End Loop;
End;
/



وهذا هو الهدف الرئيسي أخي الكريم


-----------------------------------------------

أخي الكريم ممكن أطلب منك طلب وياريت تستجيب إلي !!!

أنا ضعيف جداً في اللغة الإنجليزية ، ممكن تشرح فكرة TRANSLATE وما سبب إدخال هذه الباراميترات ، وياريت يكون بالعربي جزاك الله كلي خير !!!




شكراً

تم تعديل بواسطة MMA
رابط هذا التعليق
شارك

أخى الكريم MMA
كل ما قمت بشرحه بخصوص ال Loop فأنا اعرفه تمام المعرفه .... لكن انا قصدت ان ال id_loop اللى فى ال declare - ( انا اتكلم عن ال Function التى كتبتها فى البداية وليس كودك الاخير الذى اوضح فكرتك بطريقة صحيحة و جيدة ) - ليس له داعى فهو لن يستخدم فى ال execution section أذن ما الداعى لذكره فى ال declaration section ان لن يكن بلا هدف ؟؟؟؟؟
انا فقط اركز على هذه النقطه لأن لو قراء احد المبتدائين فى برمجة ال pl/sql هذا الكود ... فأن هذه النقطه التى ذكرتها قد تلتبس عليه و قد يعتقد ان متغير ال id_loop له علاقة بال loop ..... و هذا طبعاً غير صيحيح كما تعلم .

بخصوص فك التشفير فشكراً لطرحك لها بهذا التفصيل الممتع ....... والله انا استفدت منك كتير .... بارك الله فيك .

بالنسبة لل TRANSLATE فأنا هشرحها بالتفصيل قدر المستطاع ، و اتمنى ان يكون شرحى جيداً .

هذا هو ال Syntax الخاص بال translate

translateyg2.png



و كما هو موضح فانك بتحط فى اول خانة الكلمة و لتكن مثلاً hany و فى الخانة التانية بتحط الحروف اللى هى مفروض موجوده فى الكلمة ( طبعاً لو هتعملها على شكل موسع يعنى بدل ما نكتب hany نروح نكتب جملة كبيرة او ان نكتب اسم عمود من جدول ما يبقى هتحط كل الحروف الابجدية أحسن فى الخانة الثانية ) ، اما فى الخانة التالته فانت بتكتبله الاحرف المستبدله من الخانة التانية ..... بمعنى :-

الاول هنكتب :-

select translate('hany'



و بعد كده نكتب الحروف اللى هتتلاقى فى الكلمة اللى انت لسه كاتبها ، يعنى هتكتب الكلمة مرة اخرى :-

select translate('hany','hany'



دلوقتى مفروض اننا نبدل الحروف اللى ممكن تتلاقى من hany ( والحروف دى اللى احنا كتبناها فى الخانة التانية ) بحروف من دماغى ذى كده :-

select translate('hany','hany','iojk') from dual;



كده يبقى الناتج :-

iojk

و لما نجى نفك الشفرة نعكس الخانة التانية مكان الثالثة و فى الخانة الاولى هنكتب ناتج الكود السابق ( اى البيانات المتشفرة ) ..... ذى كده :-

select translate('iojk','iojk','hany') from dual;



كده يبقى الناتج :-

hany


بعض الملاحظات : احنا فى الخانة التانية مش لازم نكتب كل الحروف احنا ممكن نختار ثلاثة او حرفان فقط ، و بكده يكون دول بس اللى هيتم تبدلهم ... ذى كده :-

select translate('hany','ha','iojk') from dual;



و كده يبقى الناتج :-

iony

لو تلاحظ هنا هو استبدل اول حرفيين بس من hany و باقى الاحرف نزلت ذى ماهى ... مع ان كان فى حروف زيادة فى الخانة التالته ، و ده علشان ال translate بتقوم بعملية الاستبدال بالترتيب .

نقطة تانية و اخيرة ...... اى حاجه فى الاوراكل ما بين علامات تنصيص ' ' يبقى هى case sensitive .... بمعنى لو عملنا كده :-

select translate('hany','Hany','iojk') from dual;



هنلاقى الناتج :-

hojk

فهو مقدرش يستبدل ال h اللى فى hany بال i كما هو متوقع ، و ده علشان احنا كتبنا H مش h فى الخانة الثانية .

أرجو ان تكون الفكرة اكثر وضوحاً الأن .......... لو فى اى غموض أستفسر و انا مستعد اعيد تانى .

فى سلامة الله .

تم تعديل بواسطة hanyfreedom
رابط هذا التعليق
شارك

( انا اتكلم عن ال Function التى كتبتها فى البداية وليس كودك الاخير الذى اوضح فكرتك بطريقة صحيحة و جيدة )


انا مش عارف ليه ادارة المنتدى بتخلى خاصية ال Edit موجوده لفترة صغيرة جداً بعد اتمام المشاركة ...... حاجه غريبه ، الحكاية دى مش موجوده فى كل منتديات الانترنت ..... مش فاهم ايه الهدف منها ...... ما علينا ...... انا كنت اتسرعت و كتبت الجملة اللى انا - وضعها فى اطار الاقتباس - فى المشاركة السابقة .

حيث يا اخى العزيز MMA ال ID_Loop الذى ذكرته فى كودك الاخير فى ال declaration section بلا جدوى ..... مثله مثل ال ID_Loop اللى فى ال declare اللى فى الفينكشن الذى قمت بعملها ....... بمعنى انك لو حشته من ال declare فالناتج هيطلع عادى كما هو متوقع .

انظر للصورة المرفقة لمزيد من التوضيح .

اتمنى ان تكون الفكرة وصلت بوضوح .... و شكراً

post-34898-1206836627_thumb.png

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله وبركاته.
إحترامي للجميع ما تتحدثون فيه هو ترميز وليس تشفيرا فأوراكل له دول للتشفير وفك التشفير كاالتالي:

rem -----------------------------------------------------------------------
rem Filename:  password.sql
rem Purpose:   Simple password encryption package to demonstrate how
rem            values can be encrypted and decrypted using Oracle's
rem            DBMS Obfuscation Toolkit
rem Note:      Connect to SYS AS SYSDBA and run ?/rdbms/admin/catobtk.sql
rem Date:      18-Mar-2003
rem Author:    Frank Naude, Oracle FAQ
rem -----------------------------------------------------------------------


CREATE OR REPLACE PACKAGE APP_PASSWORD AS function encrypt(i_password varchar2) return varchar2;
  function decrypt(i_password varchar2) return varchar2;
END APP_PASSWORD;
/
show errors


CREATE OR REPLACE PACKAGE BODY APP_PASSWORD AS -- key must be exactly 8 bytes long
 c_encrypt_key varchar2(8) := 'key45678';

 function encrypt (i_password varchar2) return varchar2 is
   v_encrypted_val varchar2(38);
   v_data          varchar2(38);
 begin -- Input data must have a length divisible by eight
    v_data := RPAD(i_password,(TRUNC(LENGTH(i_password)/8)+1)*8,CHR(0));

    DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT(
       input_string     => v_data,
       key_string       => c_encrypt_key,
       encrypted_string => v_encrypted_val);
    return v_encrypted_val;
 end encrypt;

 function decrypt (i_password varchar2) return varchar2 is
   v_decrypted_val varchar2(38);
 begin DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT(
       input_string     => i_password,
       key_string       => c_encrypt_key,
       decrypted_string => v_decrypted_val);
    return v_decrypted_val;
 end decrypt;


end APP_PASSWORD;
/
show errors

-- Test if it is working...
select APP_password.encrypt('PASSWORD1') from dual; select APP_password.decrypt(APP_password.encrypt('PASSWORD1')) from dual; select APP_password.encrypt('PSW2') from dual; select APP_password.decrypt(app_password.encrypt('PSW2')) from dual


هذا الملف موجود في
ORACLE_HOME//rdbms/admin/catobtk.sql
وجزاكم الله خيرا

تم تعديل بواسطة Amgad
رابط هذا التعليق
شارك

حيث يا اخى العزيز MMA ال ID_Loop الذى ذكرته فى كودك الاخير فى ال declaration section بلا جدوى ..... مثله مثل ال ID_Loop اللى فى ال declare اللى فى الفينكشن الذى قمت بعملها ....... بمعنى انك لو حشته من ال declare فالناتج هيطلع عادى كما هو متوقع .


معزرتاً أخي فعلاً المتغير ID_Loop ليس له فائدة فأنا لم أنتبه ، لكن أخي أنا كان كل هدفي هو شرح الفكرة لا أكثر ولا أقل ، لكن بجد شكراً علي قوة ملاحظتك

أما بخصوص شرح دالة Translate فشرح ممتاز جداً ، علي فكرة أنا متابعك من زمان وبجد مواضيعك كلها تستاهل التميز

معزرتاً مرة أخري

لكن أخي ممكن نتناقش في أمر Translate قليلاً من حيث التشفير !!!

هذا الأمر يتطلب مني معرفة القيمة القديمة !!!

بمعني أدق أرغب في تحويل قيمة Hany الي قيمة hojk وبعد ذلك حتي أفك التشفير يجب أن يكون لدي القيمة القديمة أو أكون أعلمها Hany ... فكيف يمكنني معرفة القيمة التي قمت بتحويلها الي قيمة أخري !!!

للدقة ، انا لدي جدول يدعي Emp به حقل الإسم EName ، هذا الحقل يحتوي علي أسماء الموظفين ، مثل Aly - Usif - Sara - Mohamed - Dalya - Hany .... الي آخرة

فإذا أحببت أن أشفر بيانات كل إسم وتخزين البيانات مشفرة بقاعدة البيانات سيتم إدخال القيمة كما يلي :

Update Emp Set Ename = Translate(Ename,Ename,'ABCDEFGHIJKLMNOPQRSTUVWXYZ')



ولكن إذا أحببت أن أرتجع القيمة القديمة فبنفس الطريقة تقريبا أليس كذلك !!!

ولكن يجب أن يكون هناك حقل آخر حتي أعلم ما سيتم إرتجاعة

فما العمل إذاً ، أنظر :

Update Emp Set Ename = Translate(Ename,Ename,<!!! ما الذي سيتم إدخالهة هنا>)




شكراً

رابط هذا التعليق
شارك

علي فكرة أنا متابعك من زمان وبجد مواضيعك كلها تستاهل التميز

الله يخليك ده بس من ذوقك والله :unsure:

بالنسبة لل Translate ...... انا كنت شرحتها بطريقة مبسطه حتى تفهم بسهولة ..... لكن اريد ان ادقق على نقطه هامة جداً هو ان فى الخانة الثانية و الثالثة يجب ان يكون بها حروف فقط و ليس اعمدة .
و ايضاً لا مفر من كتابة كل الاحرف المراد استبدالها ... و هنا طبعاً سنكتب كل الاحرف الانجليزية ال 26 حرف كاملة الكابتل و الاسمول ( 26 + 26 = 52 ) اى 52 حرف
حتى يكون التشفير ( او الترميز على رأى الأخ Shibeika ) مظبوط .

اذن هكذا يفترض ان يكتب الكود :-

Update Emp Set Ename = Translate(Ename,
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
'QAZXSWEDCVFRTGBNHYUJMKIOLPpoiuytrewqlkjhgfdsamnbvcxz');



و عند فك التشفير نعكس الخانة التالته بالتانية :-

Update Emp Set Ename = Translate(Ename,
'QAZXSWEDCVFRTGBNHYUJMKIOLPpoiuytrewqlkjhgfdsamnbvcxz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');



انا عارف اننا كده هنكتب حروف كتيرة اوى .... بس هى دى الطريقة الافضل لضمان افضل ناتج للتشفير .

و لو فى اى حاجه تانية ابقى قولى و انا فى الخدمة .

و بالتوفيق .

رابط هذا التعليق
شارك

شكراً أخي ، جزاك الله كل خير ،

طريقة في قمة الروعة ، بس الأخ الغالي Shibeika لماذا يعترض علي هذا الكلام ، هل هناك فكر أفضل مما نتحدث عنة !!!


شكراً

رابط هذا التعليق
شارك

  • بعد 1 سنة...
السلام عليكم ورحمة الله وبركاته.
إحترامي للجميع ما تتحدثون فيه هو ترميز وليس تشفيرا فأوراكل له دول للتشفير وفك التشفير كاالتالي:
rem -----------------------------------------------------------------------
rem Filename:  password.sql
rem Purpose:   Simple password encryption package to demonstrate how
rem            values can be encrypted and decrypted using Oracle's
rem            DBMS Obfuscation Toolkit
rem Note:      Connect to SYS AS SYSDBA and run ?/rdbms/admin/catobtk.sql
rem Date:      18-Mar-2003
rem Author:    Frank Naude, Oracle FAQ
rem -----------------------------------------------------------------------


CREATE OR REPLACE PACKAGE APP_PASSWORD AS function encrypt(i_password varchar2) return varchar2;
  function decrypt(i_password varchar2) return varchar2;
END APP_PASSWORD;
/
show errors


CREATE OR REPLACE PACKAGE BODY APP_PASSWORD AS -- key must be exactly 8 bytes long
 c_encrypt_key varchar2(8) := 'key45678';

 function encrypt (i_password varchar2) return varchar2 is
   v_encrypted_val varchar2(38);
   v_data          varchar2(38);
 begin -- Input data must have a length divisible by eight
    v_data := RPAD(i_password,(TRUNC(LENGTH(i_password)/8)+1)*8,CHR(0));

    DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT(
       input_string     => v_data,
       key_string       => c_encrypt_key,
       encrypted_string => v_encrypted_val);
    return v_encrypted_val;
 end encrypt;

 function decrypt (i_password varchar2) return varchar2 is
   v_decrypted_val varchar2(38);
 begin DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT(
       input_string     => i_password,
       key_string       => c_encrypt_key,
       decrypted_string => v_decrypted_val);
    return v_decrypted_val;
 end decrypt;


end APP_PASSWORD;
/
show errors

-- Test if it is working...
select APP_password.encrypt('PASSWORD1') from dual; select APP_password.decrypt(APP_password.encrypt('PASSWORD1')) from dual; select APP_password.encrypt('PSW2') from dual; select APP_password.decrypt(app_password.encrypt('PSW2')) from dual


هذا الملف موجود في
ORACLE_HOME//rdbms/admin/catobtk.sql
وجزاكم الله خيرا




السلام عليكم ورحمة الله وبركاته
بارك الله فيكم شرح ممتاز
بس ممكن حد يوضح الكلام اللي كتبه الاخ Shibeika
محتاج لتوضح اكتر لو سمحتم
رابط هذا التعليق
شارك

  • بعد 1 سنة...

السلام عليكم ورحمة الله وبركاته لتوضيح كلام الاخ Shibeika :-
اولا ما هو الترميز encoding : وهو عباره عن الاشاره لرقم او حرف برمز اخر سواء كان هذا الرمز حرفا او رقما مختلفا
التشفير encryption : وهو عباره عن تغيير النص ولكن عن طريق استخدام مفتاح تشفير "key" وعمل بعض العمليات الحسابيه (اللوغريتمات) التي تربط بين نص التشفير plaintext والنص المشفر ciphertext
إذا ما نفهمه هو ان الترميز هو أصل التشفير او بدايه علم التشفير وكان قديما عباره عن ترميز للنصوص اي تبديلها او عكس ترتيبها وهو ما يحدث في عمليه التشفير حديثا ولكن بشكل اكثر تعقيدا فكلاهما يكملان بعضهما البعض ويخرجان نتيجة واحده وهي الحفاظ علي سرية المعلومات  
وشكرا

رابط هذا التعليق
شارك


السلام عليكم ورحمة الله وبركاته.
إحترامي للجميع ما تتحدثون فيه هو ترميز وليس تشفيرا فأوراكل له دول للتشفير وفك التشفير كاالتالي:
[



أخي الكريم ممكن توضح ماهو التشفير وما هو الترميز ؟؟
إذا أمكن أخي والله ما عرفت أكتب إسمك شهبيكا وإعذرنا

شكراً للكل بس حاب الأخ الكريم اللي يفصل ما بين الترميز والتشفير يوضح الفرق
رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية