الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

تشفير البيانات !

Featured Replies

بتاريخ:

ماهي الدالة التي عن طريقها أستطيع تشفير البيانات المدخلة من قبل المستخدم .. مثلاً : كلمة السر..
بحيث أمررها للدالة وتقوم الدالة بتشفيرها ..



ملاحظة : توجد مثل هذه الدالة في MySQL .. فليس من المعقول أن لا تكون هناك مثلها في أوراكل :rolleyes:

بتاريخ:

سوال
يمكن تشفير البيانات مثل اسم العميل وتحويل ال مثلا ؟؟* ؟ " حتى تكون فى سريا للبيانات كيبر
هل ممكن عند ادخل البيانات يقوم البرنامج بتحوله وتسجله فى قاعده البيانات الى رموز والعكس؟؟

بتاريخ:

أهلا أخى مستر أوراكل ايه أخبارك أسف على التأخر فى الرد

بالنسبة لتشفير بيانات فى حقل معين موجود فى table

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


والخطوت سوف تكون انشاء جدول للمستخدمين ثم انشاء اجرائين الأول لتشفير كلمة المرور وحفظها في الجدول والثاني سوف يقوم بفك التشفير ....


أولا / لو قمنا بإنشاء جدول للمستخدمن كالتالي :

CREATE TABLE APP_USERS(USERID VARCHAR2(20), 
UPASS VARCHAR2(20));



ثانيا / نقوم بإنشاء الإجراءات التالية :

---أول إجراء سوف يقوم بتشفير كلمة المرور وحفظها في الجدول

CREATE OR REPLACE PROCEDURE PASS_ENC(U_NAME IN VARCHAR2,V_PASS_ENCODE IN VARCHAR2) 
IS 
V_RESULT VARCHAR2(25); 
BEGIN 

SELECT TRANSLATE(V_PASS_ENCODE, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ', 
'1234567890!@#$%^&*()-=_+;,.') INTO V_RESULT 
FROM DUAL; 

INSERT INTO APP_USERS(USERID,UPASS) 
VALUES (U_NAME,V_RESULT); 

DBMS_OUTPUT.PUT_LINE(V_RESULT); 
END; 
/ 




---ثان أجراء سوف يقوم بفك التشفير كلمة المرور وويقوم بإستخدامه مدير النظام لفك تشفير كلمات المرور

CREATE OR REPLACE PROCEDURE PASS_DEC(V_PASS_DECODE IN VARCHAR2) 
IS 
V_RESULT VARCHAR2(25); 
BEGIN 
SELECT TRANSLATE( 
V_PASS_DECODE, 
'1234567890!@#$%^&*()-=_+;,.', 
'ABCDEFGHIJKLMNOPQRSTUVWXYZ ') INTO V_RESULT 
FROM DUAL; 
DBMS_OUTPUT.PUT_LINE(V_RESULT); 
END; 




بعد ذلك يمكننا أضافة المستخدمين كالتالي :

BEGIN 

PASS_ENC('MOHAMMED','DEVORA'); 

END; 




لوقمنا بعمل جملة SELECT على الجدول APP_USERS فإن النتيجة سوف تكون :

USERID UPASS
-------------------- --------------------
MOHAMMED 45=%*1



ولفك التشفير نقوم بإستخدام الإجراء الثاني :

BEGIN 

PASS_DEC('45=%*1'); 

END; 




والناتج بالطبع كلمة المرور DEVORA .....

ارجوا ان يكون هذا المثال واضح واي سؤال انا جاهز

أخى مستر أوراكل
أرجو ان يفى ذلك بالغرض ويجيب على سؤالك وانا تحت أمرك لو أردت اى شيى
ولا تنسى الاخ الاستاذ محمد الشنقيطى بالدعاء

والسلام

بتاريخ:

بارك الله لكما معا على هذه المعلومة الجميلة،و بالتوفيق.

بتاريخ:
  • كاتب الموضوع

شكراً لك :)

لكن .. ألا توجد دالة جاهزة كمافي MySQL ؟؟
عمل هذه الدالة في MySQL هو أنه عندما ترغب بتخزين شيء ما في حق معين تقوم بتمريره إلى هذه الدالة لتقوم بتشفيره
وتقوم نفس هذه الدالة أيضاُ بفك التشفير وذلك عندما ترغب في عرض البيانات على المستخدم

ملاحظة .. الدالة مبنية لتقوم بالتشفير بدرجة عالية من القوة !!

بتاريخ:

الاخ مستر اوراكل لو توضح كيفية عمل هذه الـ Function
ممكن نعمل واحدة مشابه لها او حتى مبسطة

بتاريخ:
  • كاتب الموضوع

عند تنفيذ التالي :

INSERT into users VALUES (001,'Ali','abc123');



فإن كلمة السر ستخزن في الجدول كماهي أي : abc123

ولكن عند التعديل إلى الآتي :

INSERT into users VALUES (001,'Ali',password('abc123'));



يتم تخزين الباسوورد على شكل بيانات مشفرة وبطول ثابت .. حيث تقوم الدالة password بعملية التشفير

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

SELECT password(user_password) FROM users WHERE ID=001;


سيقوم الإستعلام السابق طبعا بعرض باسوورد المستخدم الذي يحمل الرقم 001

أنا أتوقع بأنه يوجد دالة مضمنة في الأوراكل .. فليس من المعقول أن منتجاً يتميز يالأمان العالي في قواعد البيانات ويعتبر منتجا ضخما ولا يوجد به مثل هذه الدالة!!

تم تعديل بواسطة مستر أوراكل

بتاريخ:

هى دالة جميلة فعلا
يمكن فية واحدة فى الاوركل

بتاريخ:
  • كاتب الموضوع

هاه يا شباب ؟

بتاريخ:

ممكن مثال على هذه الداله

بتاريخ:

المثال مكتوب اعلاه اخ سلامة

  • بعد 3 أسابيع...
بتاريخ:
  • كاتب الموضوع

كل واحد فيكم يدخل على المستخدم system
وبعدين يستعرض الجدول dba_users عن طريق الإستعلام الآتي :

select username,password from dba_users;



ويلاحظ الباسووردات لكل مستخدم !!!

ماذا تلاحظوا ؟؟؟
أن جميعها بنفس الطول .. حتى لو كانت الباسوورد مكونة من ثلاثة خانات

هذه هي نفس طريقة التشفير في MySQL حيث تقوم الدالة بتشفير البيانات بطول ثابت
طبعا صعب فك هذا التشفير .. صعب جدا جدا

  • بعد 2 أسابيع...
بتاريخ:

True Encryption and Decryption based on Built-in Oracle

Data Encryption in Oracle
Oracle 8.1.7. Oracle 9

Package name dbms_obfuscation_toolkit.DESEncrypt
dbms_obfuscation_toolkit.DESDecrypt

Example:

CREATE OR REPLACE PACKAGE CryptIT AS 
FUNCTION encrypt( Str VARCHAR2, 
hash VARCHAR2 ) RETURN VARCHAR2;
FUNCTION decrypt( xCrypt VARCHAR2,
hash VARCHAR2 ) RETURN VARCHAR2;
END CryptIT;
/

CREATE OR REPLACE PACKAGE BODY CryptIT AS 
crypt_str VARCHAR2(2000);

FUNCTION encrypt( Str VARCHAR2, 
hash VARCHAR2 ) RETURN VARCHAR2 AS

l integer := length(str);
i integer;
padblock varchar2(2000);

BEGIN
i := 8-mod(l,8);
padblock := str||rpad(chr(i),i,chr(i));

dbms_obfuscation_toolkit.DESEncrypt(
input_string => padblock,
key_string => RPAD(hash,8,'#'), 
encrypted_string => crypt_str );
RETURN crypt_str;
END;

FUNCTION decrypt( xCrypt VARCHAR2,
hash VARCHAR2 ) RETURN VARCHAR2 AS
l number; 
BEGIN
dbms_obfuscation_toolkit.DESDecrypt(
input_string => xCrypt, 
key_string => RPAD(hash,8,'#'), 
decrypted_string => crypt_str );
l := length(crypt_str);
crypt_str := rpad(crypt_str,l-ascii(substr(crypt_str,l)));
RETURN crypt_str;
END;
END CryptIT;
/
show err

set serveroutput on

declare
plaintext varchar2(4000);
begin
-- 12345678123456781234567812345678
plaintext := 'A story about 7 fat dwarfs.';
dbms_output.put_line('>'||cryptit.decrypt(cryptit.encrypt(plaintext,'B'),'B')||'<');
end;
/



Ammar Sajdi
Amman - Jordan

  • بعد 6 شهور...
بتاريخ:

شكراً جزيلا لاخ طارق احمد على هذه المشاركة الرائعة

  • بعد 1 سنة...
بتاريخ:

شكرأ الاخ مستر أوراكل والله يوفقك وإلى الامام معلومة مفيدة جداً

  • بعد 4 سنة...
بتاريخ:

السلام عليكم
يوجد إجراء dbms_obfuscation_toolkit.desencrypt
يستخدم للتشفير

ويوجد إجراء dbms_obfuscation_toolkit.desdecrypt
يستخدم لفك التشفير

وهذا مثال يوضح كيفية الاستخدام


DECLARE
input_string VARCHAR2(16) := 'agilani ';
key_string VARCHAR2(8) := 'scottsc ';
encrypted_string VARCHAR2(2048);
decrypted_string VARCHAR2(2048);
begin
dbms_obfuscation_toolkit.DESEncrypt(
input_string => input_string,
key_string => key_string,
encrypted_string => encrypted_string );
dbms_output.put_line('> encrypted hex value : ' ||
rawtohex(UTL_RAW.CAST_TO_RAW(encrypted_string)));
dbms_obfuscation_toolkit.DESDecrypt(
input_string => encrypted_string,
key_string => key_string,
decrypted_string => decrypted_string );
dbms_output.put_line('> decrypted string output : ' ||
decrypted_string);
end; 

dbms_obfuscation_toolkit.txt

بتاريخ:

في داله للتشفير الملف اسمها warb

  • بعد 2 شهور...
بتاريخ:

عندي حل للتشفير بطريقه أخرى

create table users_men
(user_name varchar2 (120),
pass varchar2 (20));



declare
x varchar2 (80):=30;
begin
:user_name:=upper(:user_name);
:pass:=upper(:pass); 
for i in 1 .. length (:pass)
loop
if mod (i,2)=1 then
x:=x || chr(ASCII(substr(:PASS,I,1))+100);
else
x:=x || chr(ASCII(substr(:pass,I,1))+105);
end if;
end loop;
:pass:=x;
commit;
end;



ولفك التشفير نعكس الكود كالتالي

declare
x varchar2 (80):=30;

begin
:user_name:=upper(:user_name);
:pass:=upper(:pass); 
for i in 1 .. length (:pass)
loop
if mod (i,2)=1 then
x:=x || chr(ASCII(substr(:PASS,I,1))-100);
else
x:=x || chr(ASCII(substr(:pass,I,1))-105);
end if;
end loop;
:pass:=x;
commit;
end;

تم تعديل بواسطة Mahmoud Shahryar

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.