PDA

View Full Version : رمزگذاری اطلاعات درون بانک اطلاعات



H_afkhami60
پنج شنبه 25 اردیبهشت 1393, 09:45 صبح
سلام خدمت دوستان
چطوری میشه اطلاعات درون بانک اطلاعات مخصوصاً جدولی که اطلاعات کاربران داخل اون هست را رمزگذاری کرد که گه کسی با enterprice Manager اونا را نگاه کرد، نتونه مثلاً کلمه رمز را بخونه.

hadisalahi2
پنج شنبه 25 اردیبهشت 1393, 10:48 صبح
باید قبل از اینکه در جدول ذخیره کنی اونها رو با یک روش کدینگ رمز گذاری کنی و موقعی هم که میخوای اونها رو بخونی ، رمزگشایی کنی
در مورد رمزنگاری رشته ها و اطلاعات هم تاپیک های بسیار زیادی وجود داره
اما یک نمونه کد برات میزام



function Decode(const S: AnsiString): AnsiString;
const
Map: array[Char] of Byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0);
var
I: LongInt;
begin
case Length(S) of
2:
begin
I := Map[S[1]] + (Map[S[2]] shl 6);
SetLength(Result, 1);
Move(I, Result[1], Length(Result))
end;
3:
begin
I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12);
SetLength(Result, 2);
Move(I, Result[1], Length(Result))
end;
4:
begin
I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12) +
(Map[S[4]] shl 18);
SetLength(Result, 3);
Move(I, Result[1], Length(Result))
end
end
end;


function Encode(const S: AnsiString): AnsiString;
const
Map: array[0..63] of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
'abcdefghijklmnopqrstuvwxyz0123456789+/';
var
I: LongInt;
begin
I := 0;
Move(S[1], I, Length(S));
case Length(S) of
1:
Result := Map[I mod 64] + Map[(I shr 6) mod 64];
2:
Result := Map[I mod 64] + Map[(I shr 6) mod 64] +
Map[(I shr 12) mod 64];
3:
Result := Map[I mod 64] + Map[(I shr 6) mod 64] +
Map[(I shr 12) mod 64] + Map[(I shr 18) mod 64]
end
end;





const
Codes64 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm nopqrstuvwxyz+/';


function Encode64(S: string): string;
var
i: Integer;
a: Integer;
x: Integer;
b: Integer;
begin
Result := '';
a := 0;
b := 0;
for i := 1 to Length(s) do
begin
x := Ord(s[i]);
b := b * 256 + x;
a := a + 8;
while a = 6 do
begin
a := a - 6;
x := b div (1 shl a);
b := b mod (1 shl a);
Result := Result + Codes64[x + 1];
end;
end;
if a 0 then
begin
x := b shl (6 - a);
Result := Result + Codes64[x + 1];
end;
end;


function Decode64(S: string): string;
var
i: Integer;
a: Integer;
x: Integer;
b: Integer;
begin
Result := '';
a := 0;
b := 0;
for i := 1 to Length(s) do
begin
x := Pos(s[i], codes64) - 1;
if x = 0 then
begin
b := b * 64 + x;
a := a + 6;
if a = 8 then
begin
a := a - 8;
x := b shr a;
b := b mod (1 shl a);
x := x mod 256;
Result := Result + chr(x);
end;
end
else
Exit;
end;
end;

Delphi 2010
پنج شنبه 25 اردیبهشت 1393, 11:03 صبح
به اضافه روش بالا می تونید از سربرگ Indy Misc از کامپوننت های Encode و Decode استفاده کنید
چند کامپوننت موجود هست در این سربرگ برای رمز نگاری که برای مثال به منظور Encode از کامپوننت IdEncoderMIME و برای Decode از IdDecoderMIME استفاده کنید
این دو کامپوننت هر دو خروجی و ورودی string دارند
نمونه کد:
Encode:

IdEncoderMIME1.Encode('Example');
Decode:

IdDecoderMIME1.DecodeString('Example');

Arman_1367
شنبه 27 اردیبهشت 1393, 08:39 صبح
یه راه دیگه هم که وجود دارد استفاده کردن از دستورات SQL هست.بدین صورت :
تابعی وجود دارد به نام HASHBYTES که به صورت زیر متنی را می گیرد و خروجی MD5 برای شما تولید می کند :
HashBytes('MD5',N'Password')
و مثال :
درج در جدول :
insert into dbo.users (UserName .... Password) values (Value1,....,HashBytes('MD5',N'Password'))
و برای عملیات ورود هم :
Select Count(*) From dbo.users where UserName=Value1 and password=HashBytes('MD5',N'Password')

لازم به ذکر هست که فیلد password رو باید از نوع باینری با طول حداقل 16 در نظر بگیرید.

H_afkhami60
شنبه 03 خرداد 1393, 09:42 صبح
دوستان عزیز راه حل های شما خوب است اما با این روش ها هر کسی که این تاپیک را بخواند می تواند با کمی آزمایش و خطا و با ساختن یک برنامه کوچک و همین decode ها که در این تاپیک آمده به رمز دست پیدا کند.

یوسف زالی
شنبه 03 خرداد 1393, 10:16 صبح
کسی که کد hash رو داشته باشه عملا به هیچ دردش نمی خوره. چون بازگشت پذیر نیست.
به درد این که دیتا رو کد کنید و دی کد کنید هم نمی خوره.

H_afkhami60
شنبه 03 خرداد 1393, 14:36 عصر
جناب you-see منظور شما از اینکه به درد کد کردن نمی خوره چیه؟ یعنی روش های گفته شده توسط دوستان کارآئی لازم را ندارند؟ چون برای کد کردن که میشه ازشون استفاده کرد. مثلاً من برای کدگذاری کلمه عیور در جدول یوزرها از روشی که دوستمون (delphi 2010) گفتند، استفاده کردم. اما با خودم گفتم که خوب ممکنه که یکی هم بیاد و همین کلمه عبور کد شده را با کامپوننت IdDecoderMIME ، دی کد کنه و کلمه عبور را تشخیص بده. بعد با همین کلمه عبور که مثلاً مال مدیر سیستم بره داخل نرم افزار و خرابکاری کنه.

benyaminrahimi
شنبه 03 خرداد 1393, 19:20 عصر
در مجموعه unidac کامپوننتی وجود داره به اسم encripter که شما فیلد و الگوریتم و یک پس ورد انتخاب میکنید و یه الگوریتم یونیک بر مبنای الگوریتم اصلی ساخته میشه ونیاز به یک خط هم کد نویسی نداره.

یوسف زالی
شنبه 03 خرداد 1393, 20:39 عصر
منظور من این بود که اگر مثلا داده هایی مثل اسامی مشتریان رو دارید کد می کنید نکنید بهتره.
اما برای پسورد یوزر ها هش کردن روش خوبیه. چون در اصل ، اصل پسورد رو بانک هم حتی نداره که بشه درش آورد. یوزر با دادن پسورد در حقیقت داره دو تا هش کد رو مقایسه می کنه.
می تونید یکی از الگوریتم ها رو بگیرید و سالت کنید، یعنی این که الگوریتم خودتون رو باهاش ترکیب کنید.

H_afkhami60
یک شنبه 04 خرداد 1393, 07:49 صبح
جناب رحیمی با تشکر از راهنمایی شما، این مجموعه unidac را از کجا باید پیدا کنم؟

benyaminrahimi
یک شنبه 04 خرداد 1393, 09:04 صبح
متاسفانه نمیتونم اینجا براتون ارسال کنم با کمی جستجو موفق میشید