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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

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


15 رد (ردود) على هذا الموضوع

#1 nesso

nesso

    مشترك

  • الأعضــاء
  • 69 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 05 March 2008 - 10:26 AM

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

#2 Hani_S

Hani_S

    عضو

  • الأعضــاء
  • 20 مشاركة

تاريخ المشاركة 05 March 2008 - 02:23 PM

السلام عليكم

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

مع السلامة

#3 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 24 March 2008 - 11:22 AM

بالنسبة لكلمة مرور فأنت ممكن تعملها للأسكيمة كلها
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


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

#4 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 28 March 2008 - 03:40 PM

شكراً للأخ ( 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'));



شكراً

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#5 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 28 March 2008 - 09:18 PM

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



#6 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 28 March 2008 - 11:12 PM

انا كنت عاوز اقول بعض الملاحظات على كود اخى العزيز 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 .



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

أخوك هانى

#7 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 29 March 2008 - 05:01 PM

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

أخوك هاني


لا يا أخي كلامك هذا ينال مني كل إحترام وبالعكس كلامك صحيح ، بس أخي أنا فعلياً هذا ما كنت أفعلة في الفيجوال 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, 29 March 2008 - 05:04 PM.

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#8 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 30 March 2008 - 01:23 AM

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

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

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

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

صورة


و كما هو موضح فانك بتحط فى اول خانة الكلمة و لتكن مثلاً 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, 30 March 2008 - 02:06 AM.


#9 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 30 March 2008 - 03:25 AM

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


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

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

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

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

ملفات مرفقة

  • ملف مرفق  noway.PNG   8.57كيلو   74 عدد مرات التحميل


#10 Shibeika

Shibeika

    عضو نشط

  • الأعضــاء
  • 240 مشاركة

تاريخ المشاركة 30 March 2008 - 11:06 AM

السلام عليكم ورحمة الله وبركاته.
إحترامي للجميع ما تتحدثون فيه هو ترميز وليس تشفيرا فأوراكل له دول للتشفير وفك التشفير كاالتالي:
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, 12 March 2009 - 03:40 PM.


#11 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 30 March 2008 - 01:13 PM

حيث يا اخى العزيز 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,<!!! ما الذي سيتم إدخالهة هنا>)


شكراً

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#12 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 30 March 2008 - 07:09 PM

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

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

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

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

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


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

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


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

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

و بالتوفيق .

#13 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 30 March 2008 - 08:34 PM

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

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


شكراً

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#14 ayman_zz22

ayman_zz22

    عضو

  • الأعضــاء
  • 18 مشاركة

تاريخ المشاركة 06 May 2009 - 04:42 PM

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

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
محتاج لتوضح اكتر لو سمحتم

#15 mezo_3_2000

mezo_3_2000

    عضو

  • الأعضــاء
  • 19 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 18 February 2011 - 09:06 PM

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