نمایش نتایج 1 تا 7 از 7

نام تاپیک: String Encoding in C Sharp

  1. #1
    VIP آواتار Anti_Evil
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    سرگردان در کهکشان !
    پست
    529

    String Encoding in C Sharp

    سلام مهندس،
    آقا میتونی کدی ... لینکی .. چیزی در مورد string encoding در net. بهم بدی ؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    2,342
    به صورت پیش فرض انکدینگ آن utf-8 است. مشکل شما الان چیست؟

  3. #3
    VIP آواتار Anti_Evil
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    سرگردان در کهکشان !
    پست
    529
    آخ آقا شرمنده من اشتباه نوشتم :oops:
    منظورم string encryption هستش، برای کد کردن string به منظور استفاده در قطعات امنیتی در برنامه ها ...

  4. #4

  5. #5
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    2,342
    :wink:
    --------
    یک سری مقاله کریپتوگرافی البته در مورد VB.NET است ولی اصول یکی است چون فضاهای نام یکی است :
    http://www.devx.com/security/Article/7019/0/page/1

    برای استفاده از DES :


    using System;
    using System.IO;
    using System.Text;
    using System.Security;
    using System.Security.Cryptography;
    using System.Web.Services;

    namespace FE_SymmetricNamespace
    {
    public class FE_Symmetric
    {
    static private Byte[] m_Key = new Byte[8];
    static private Byte[] m_IV = new Byte[8];

    //////////////////////////
    //Function to encrypt data
    public string EncryptData(String strKey, String strData)
    {
    string strResult; //Return Result

    //1. String Length cannot exceed 90Kb. Otherwise, buffer will overflow. See point 3 for reasons
    if (strData.Length > 92160)
    {
    strResult="Error. Data String too large. Keep within 90Kb.";
    return strResult;
    }

    //2. Generate the Keys
    if (!InitKey(strKey))
    {
    strResult="Error. Fail to generate key for encryption";
    return strResult;
    }

    //3. Prepare the String
    // The first 5 character of the string is formatted to store the actual length of the data.
    // This is the simplest way to remember to original length of the data, without resorting to complicated computations.
    // If anyone figure a good way to 'remember' the original length to facilite the decryption without having to use additional function parameters, pls let me know.
    strData = String.Format("{0,5:00000}"+strD ata, strData.Length);


    //4. Encrypt the Data
    byte[] rbData = new byte[strData.Length];
    ASCIIEncoding aEnc = new ASCIIEncoding();
    aEnc.GetBytes(strData, 0, strData.Length, rbData, 0);

    DESCryptoServiceProvider descsp = new DESCryptoServiceProvider();

    ICryptoTransform desEncrypt = descsp.CreateEncryptor(m_Key, m_IV);


    //5. Perpare the streams:
    // mOut is the output stream.
    // mStream is the input stream.
    // cs is the transformation stream.
    MemoryStream mStream = new MemoryStream(rbData);
    CryptoStream cs = new CryptoStream(mStream, desEncrypt, CryptoStreamMode.Read);
    MemoryStream mOut = new MemoryStream();

    //6. Start performing the encryption
    int bytesRead;
    byte[] output = new byte[1024];
    do
    {
    bytesRead = cs.Read(output,0,1024);
    if (bytesRead != 0)
    mOut.Write(output,0,bytesRead);
    } while (bytesRead > 0);

    //7. Returns the encrypted result after it is base64 encoded
    // In this case, the actual result is converted to base64 so that it can be transported over the HTTP protocol without deformation.
    if (mOut.Length == 0)
    strResult = "";
    else
    strResult = Convert.ToBase64String(mOut.GetBuffer(&#41 ;, 0, (int)mOut.Length);

    return strResult;
    }

    //////////////////////////
    //Function to decrypt data
    public string DecryptData(String strKey, String strData)
    {
    string strResult;

    //1. Generate the Key used for decrypting
    if (!InitKey(strKey))
    {
    strResult="Error. Fail to generate key for decryption";
    return strResult;
    }

    //2. Initialize the service provider
    int nReturn = 0;
    DESCryptoServiceProvider descsp = new DESCryptoServiceProvider();
    ICryptoTransform desDecrypt = descsp.CreateDecryptor(m_Key, m_IV);

    //3. Prepare the streams:
    // mOut is the output stream.
    // cs is the transformation stream.
    MemoryStream mOut = new MemoryStream();
    CryptoStream cs = new CryptoStream(mOut, desDecrypt, CryptoStreamMode.Write);

    //4. Remember to revert the base64 encoding into a byte array to restore the original encrypted data stream
    byte[] bPlain = new byte[strData.Length];
    try
    {
    bPlain = Convert.FromBase64CharArray(strData.ToCharArra y(), 0, strData.Length);
    }
    catch (Exception)
    {
    strResult = "Error. Input Data is not base64 encoded.";
    return strResult;
    }

    long lRead = 0;
    long lTotal = strData.Length;

    try
    {
    //5. Perform the actual decryption
    while (lTotal >= lRead)
    {
    cs.Write(bPlain,0,(int)bPlain.Length&# 41;;
    //descsp.BlockSize=64
    lRead = mOut.Length + Convert.ToUInt32(((bPlain.Length / descsp.BlockSize) * descsp.BlockSize));
    };

    ASCIIEncoding aEnc = new ASCIIEncoding();
    strResult = aEnc.GetString(mOut.GetBuffer(), 0, (int)mOut.Length);

    //6. Trim the string to return only the meaningful data
    // Remember that in the encrypt function, the first 5 character holds the length of the actual data
    // This is the simplest way to remember to original length of the data, without resorting to complicated computations.
    String strLen = strResult.Substring(0,5);
    int nLen = Convert.ToInt32(strLen);
    strResult = strResult.Substring(5, nLen);
    nReturn = (int)mOut.Length;

    return strResult;
    }
    catch (Exception)
    {
    strResult = "Error. Decryption Failed. Possibly due to incorrect Key or corrputed data";
    return strResult;
    }
    }

    /////////////////////////////////////////////////////////////
    //Private function to generate the keys into member variables
    static private bool InitKey(String strKey)
    {
    try
    {
    // Convert Key to byte array
    byte[] bp = new byte[strKey.Length];
    ASCIIEncoding aEnc = new ASCIIEncoding();
    aEnc.GetBytes(strKey, 0, strKey.Length, bp, 0);

    //Hash the key using SHA1
    SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
    byte[] bpHash = sha.ComputeHash(bp);

    int i;
    // use the low 64-bits for the key value
    for (i=0; i<8; i++)
    m_Key[i] = bpHash[i];

    for (i=8; i<16; i++)
    m_IV[i-8] = bpHash[i];

    return true;
    }
    catch (Exception)
    {
    //Error Performing Operations
    return false;
    }
    }
    }
    }


    ----------

    البته اگر کمی صبر کنید بخش کریپتوگرافی سایت را باید گرم تر کرد :idea:

  6. #6
    VIP آواتار Anti_Evil
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    سرگردان در کهکشان !
    پست
    529
    ایول !!! مرسی آقا فرهاد ... همونه که میخواستم :wink:

  7. #7
    VIP آواتار Anti_Evil
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    سرگردان در کهکشان !
    پست
    529
    آقا وحید ممنون ! خیلی توپه !
    برای من همین کافیه مهندس :wink:
    دستت طلا !

تاپیک های مشابه

  1. پیدا کردن IP در asp.net using c sharp
    نوشته شده توسط peymannaji در بخش ASP.NET Web Forms
    پاسخ: 10
    آخرین پست: شنبه 01 فروردین 1388, 21:09 عصر
  2. مرجعی برای یاد گیری C-Sharp
    نوشته شده توسط egoldashraf در بخش C#‎‎
    پاسخ: 3
    آخرین پست: پنج شنبه 05 مهر 1386, 17:43 عصر
  3. web service and c-sharp
    نوشته شده توسط khafanovich در بخش WCF , Web Services , .Net Remoting
    پاسخ: 1
    آخرین پست: جمعه 01 خرداد 1383, 20:53 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •