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

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


مستر أوراكل

Recommended Posts

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



ملاحظة : توجد مثل هذه الدالة في 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 هو أنه عندما ترغب بتخزين شيء ما في حق معين تقوم بتمريره إلى هذه الدالة لتقوم بتشفيره
وتقوم نفس هذه الدالة أيضاُ بفك التشفير وذلك عندما ترغب في عرض البيانات على المستخدم

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

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

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

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

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

  • بعد 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
رابط هذا التعليق
شارك

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

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

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

×   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.

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

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

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