PDA

مشاهده نسخه کامل : سوال در مورد C# Encryption



germ
29-01-10, 00:11
من میخواهم یک استرینگ که تو سی شارپ انکد شده رو در php دکود کنم و برعکس

انکدینگی که استفاده میکنم (Rijndael(AES
سی شارپ رو خیلی خیلی کم بلدم :1. (29): .. کلی سرچ کردم ساده ترین کدی که پیدا کردم و کمی تغیرش دادم این جا گذاشتم

فعلا در مورد انکود کردن کمکم کنید



public static string SecureDataAlg(string StrInp, string strKey, string strIV)
{
byte[] input = Encoding.UTF8.GetBytes(StrInp);
byte[] key = ASCIIEncoding.UTF8.GetBytes(strKey);
byte[] iv = ASCIIEncoding.UTF8.GetBytes(strIV);

RijndaelManaged rijndael = new RijndaelManaged();
rijndael.Mode = CipherMode.CBC;
rijndael.Key = key;
rijndael.KeySize = 16;
rijndael.IV = iv;
ICryptoTransform rijndaelTransform = rijndael.CreateEncryptor();
MemoryStream memStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memStream, rijndaelTransform, CryptoStreamMode.Write);
cryptoStream.Write(input, 0, input.Length);
cryptoStream.FlushFinalBlock();
byte[] str = memStream.ToArray();
return Convert.ToBase64String(str);
}


ولی این کار نمیکنه .. اروری که میده "Specified key is not a valid size for this algorithm"

چیکار کنم که هر key با هر طولی بتونم بهش بدم

امیدم به شما دوستانه :give_rose:

MoBiN.R
29-01-10, 14:52
با سلام .. روش های کدگذاری در .Net زیاد است ولی یکی از الگوریتم های کدگذاری MD5 هست که خوب کار میکنه .. از این الگوریتم با اضافه کردن فضای نام using System.Security.Cryptography; میتونید ازش استفاده کنید .

بصورت زیر :


public static string EncodePassword(string originalPassword)
{

Byte[] originalBytes;

Byte[] encodedBytes;

MD5 md5;



// Conver the original password to bytes; then create the hash

md5 = new MD5CryptoServiceProvider();

originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);

encodedBytes = md5.ComputeHash(originalBytes);



// Bytes to string

return System.Text.RegularExpressions.Regex.Replace(BitCo nverter.ToString(encodedBytes), "-", "").ToLower();

}

برای استفاده هم بصورت زیر :


MessageBox.Show(EncodePassword("123456789"));

germ
29-01-10, 15:08
md5 که فقط انکریپت میکنه، ولی من میخوام دیتاها رو دکریپت کنم

ترجیحا انکریپیشن AES یا DES باشه

توی دات نت چطور انکریپت کنم؟
یه متنی رو با سی شارپ انکد میکنم ولی نتیجه با زبانهای دیگه یکی نیست، مثل php یا javascript

نمیدونم مشکل کارم کجاست

MoBiN.R
29-01-10, 16:32
md5 که فقط انکریپت میکنه، ولی من میخوام دیتاها رو دکریپت کنم

ترجیحا انکریپیشن AES یا DES باشه

توی دات نت چطور انکریپت کنم؟
یه متنی رو با سی شارپ انکد میکنم ولی نتیجه با زبانهای دیگه یکی نیست، مثل php یا javascript

نمیدونم مشکل کارم کجاست

MD5 هم میشه انکریپت کرد هم دیکریپت .. اگر توی برنامه ها از MD5 با الگوریتم مشابه استفاده کنید فکر نمیکنم فرقی کنه . مگر اینکه فضای نام MD5 ای که در جاهای دیگه تعریف شده فرق داره . سورس زیر انکریپت و دیکریپت با استفاده از MD5 هست :

germ
31-01-10, 22:54
MD5 هم میشه انکریپت کرد هم دیکریپت .. اگر توی برنامه ها از MD5 با الگوریتم مشابه استفاده کنید فکر نمیکنم فرقی کنه . مگر اینکه فضای نام MD5 ای که در جاهای دیگه تعریف شده فرق داره . سورس زیر انکریپت و دیکریپت با استفاده از MD5 هست :

ممنون از کدی که گذاشتین، اما این کد انکریپشن بر اساس Triple DES نه MD5
md5 به صورت یک طرفه انکریپت میکنه، که قابل دکریپت نباشه .. اما بعضی ها string های کوتاه مثلا کمتر از 10 کارکتر رو دکریپت میکنند(هک میکنند) .. بعضی وقتها

شاید بد توضیح دادم و منظور من رو متوجح نشدید، من میخوام یه متنی رو به وسیله سی شارپ encode کنم و بعد توسط php دکود بشه و بر عکس

برای encryption تو سی شارپ راهای زیادی هست اما من میخاهم با php هم سازگار باشه

اگر بتونی راهنماییم کنی ممنونت میشم :give_rose:

MoBiN.R
01-02-10, 08:19
توضیح دادم براتون اگر کلاس انکریپشن سی شارپ در php ساپورت میشه نتیجه تقریبا یکیه... اما اگر نباشه امکانش نیست .

ravegoat
04-02-10, 10:27
با سلام!

دوست عزيز همان طور كه مبين جان گفتند شما بايد از يه روش رمزگذاري استفاده كنيد كه در هر دو زبان تعريف شده باشه.
الزامي نيست كه از روش هاي پيش فرض رمزنگاري مثل DES استفاده كنيد.
چون رشته ي كد شده در نهايت بايد با php از رمز در بياد پس بايد سراغ الگوريتم هاي encryption در php بريد.

من يه روش رمز نگاري ساده رو تو php از سايت PhpBuilder (Only the registered members can see the link) پيدا كردم:


<?php
// String EnCrypt + DeCrypt function
// Author: halojoy, July 2006
function convert($str,$ky=''){
if($ky=='')return $str;
$ky=str_replace(chr(32),'',$ky);
if(strlen($ky)<8)exit('key error');
$kl=strlen($ky)<32?strlen($ky):32;
$k=array();for($i=0;$i<$kl;$i++){
$k[$i]=ord($ky{$i})&0x1F;}
$j=0;for($i=0;$i<strlen($str);$i++){
$e=ord($str{$i});
$str{$i}=$e&0xE0?chr($e^$k[$j]):chr($e);
$j++;$j=$j==$kl?0:$j;}
return $str;
}
///////////////////////////////////

// Secret key to encrypt/decrypt with
$key='mysecretkey'; // 8-32 characters without spaces

// String to encrypt
$string1='To be or not to be, that is the question';

// EnCrypt string
$string2=convert($string1,$key);

// DeCrypt back
$string3=convert($string2,$key);

// Test output
echo '<span style="font-family:Courier">'."\n";
echo 'Key: '.$key.'<br>'."\n";
echo $string1.'<br>'."\n";
echo $string2.'<br>'."\n";
echo $string3.'<br>'."\n";
echo '</span>'."\n";
?>


شما مي تونيد روش كدينگ اين سورس رو با سي شارپ پيدا كنيد. در نهايت ميشه با دونستن hash و key ، رشته رو decode كرد. (طول رشته هم در اين كد زياد اهميت نداره!)

اين سورس هم خوبه:
Only the registered members can see the link
توضيحاتش هم اينجاست (Only the registered members can see the link-08-27).

موفق باشيد
آرمين:11():

germ
04-02-10, 15:02
آرمین از کدی که گذاشتی ممنون، قبلا ازش تو php استفاده کرده بودم و همین طور از مبین متشکرم

اما یه انتقاد کوچولو داشتم: چرا به جای اینکه به من کمک کنید که اشکال کارم رو پیدا کنم، نوع encription رو عوض میکنید (به عبارتی صورت مسله رو پاک میکنید)

encryption های استاندارد در هر زبان و سیستم عاملی یک جواب میده .. البته من کوچکتر از اونم که اینارو بگم ..
php و #c تقریبا از تمامی انکریپتشن های معتبر و معروف پشتیبانی میکنند

در کل از این که برای مشکلم وقت گذاشتین ممنون:11():

ravegoat
13-02-10, 10:20
با سلام!



...
یه انتقاد کوچولو داشتم: چرا به جای اینکه به من کمک کنید که اشکال کارم رو پیدا کنم، نوع encription رو عوض میکنید (به عبارتی صورت مسله رو پاک میکنید)

encryption های استاندارد در هر زبان و سیستم عاملی یک جواب میده ..

از انتقادتون ممنونم. كلا" بنده چنين قصدي نداشتم...فكر مي كردم با تغيير الگوريتم رمز نگاري شما مي تونيد راحت تر به هدفتون برسيد.:1. (26):

الگوريتمي مثل AES علاوه بر كليد، پارامتر هاي ديگه اي هم داره كه تا رعايت نشه رمزگذاري در بين دو زبان Php و CS به درستي صورت نمي گيره مانند حجم رشته در هم ريخته شده.
بنده هم با شما موافقم؛ با پيكره بندي درست پيش فرض ها در رمزنگاري، به احتمال قوي اينكريپت شما در هر زباني كار مي كنه.:1. (23):

تو اين مدت تونستم يه چيزهايي در اين مورد پيدا كنم. اون ها رو ضميمه مي كنم شايد براتون مفيد باشه.

موفق باشيد
آرمين:11():