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

نام تاپیک: اینکریپت کردن کلمه عبور

  1. #1

    اینکریپت کردن کلمه عبور

    سلام دوستان من میخواستم بدونم چطور میشه یک کلمه عبور را اینکریپت کرده ودر زمانی که بخواهیم کلمه عبور رو مشاهده کنیم آنرا دوباره به حالت عادی نمایش بده
    به عنوان مثال کلمه عبور tr123
    در بانک یک چیز دیگری ذخیره کنه ودر هنگامی که ما میخواهیم همان tr123 رو نمایش بده

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629
    نقل قول نوشته شده توسط ali2000_1358 مشاهده تاپیک
    سلام دوستان من میخواستم بدونم چطور میشه یک کلمه عبور را اینکریپت کرده ودر زمانی که بخواهیم کلمه عبور رو مشاهده کنیم آنرا دوباره به حالت عادی نمایش بده
    به عنوان مثال کلمه عبور tr123
    در بانک یک چیز دیگری ذخیره کنه ودر هنگامی که ما میخواهیم همان tr123 رو نمایش بده
    با سلام
    کافیه یه تابع برگشت پذیر درست کنى که کلمه‌ى عبور را تبدیل به یک رشته‌ى دیگر کند.
    اما تو هیچ سیستم به درد بخورى ندیدم که کلمه‌ى عبور قابل بازیافت باشد. تقریباً همه از توابع یک‌طرفه استفاده مى‌کنن. یعنى یک تابع به به ازاى یک کلمه‌ى عبور یک خروجى‌ همیش ثابت تولید مى‌کند اما از روى خروجى نمى‌توان ورودى را محاسبه کرد. یکى از این روش‌ها استفاده از CRC هست که به ازاى یک ورودى یک خروجى 16 یا 32 بیتى تولید مى‌کند ( این روش بیشتر براى داده‌ها استفاده مى‌شود ) و روش دیگر که بیشتر براى کلمه‌ى عبور استفاده مى‌شود روش Hash هست. که اگر جستجو کنى مطالب مربوط را پیدا مى‌کنى.

    صبا صبوحى

  3. #3
    نقل قول نوشته شده توسط ali2000_1358 مشاهده تاپیک
    سلام دوستان من میخواستم بدونم چطور میشه یک کلمه عبور را اینکریپت کرده ودر زمانی که بخواهیم کلمه عبور رو مشاهده کنیم آنرا دوباره به حالت عادی نمایش بده به عنوان مثال کلمه عبور tr123 در بانک یک چیز دیگری ذخیره کنه ودر هنگامی که ما میخواهیم همان tr123 رو نمایش بده
    سلام.
    Encrypt کردن کلمات عبور کار مناسبی نیست، اگر چه بهتر از نگهداری اونها بصورت Clear هستش. اما واقعیت اینه که نه مدیر سیستم و نه کاربران، هرگر نیازی ندارن تا به کلمه عبور اصلی برسن. اجازه بدید با یه مثال منظورم رو بیان کنم. فرض کنید که کاربری کلمه عبور خودش رو به گفته شما tr123 گذاشته. این کلمه رو من بصورت XDF$#^ در بانک ذخیره میکنم، و برای این تبدیل از تابعی ریاضی استفاده کردم که بازگشت ناپذیره. به توابعی که ورودیهای باینری به طول دلخواه رو به خروجیهای باینری با طولهای کوچکتر و اندازه ثابت تبدیل می کنن، Hash Function یا تابع hash میگن. به خروجی هم Hash Value گفته میشه. در عمل، پیدا کردن دو ورودی متفاوت که باعث تولید خروجی یکسانی توسط تابع hash بشه، غیر ممکنه. (اگر چه مثال Mashiharu، نمونه نقضی برای این موضوع بود). بعبارت دیگه، شما نمیتونید یه ورودی دیگه به تابع hash بدید و همون خروجی ( XDF$#^) رو بگیرید.

    این مساله به ما کمک میکنه تا بتونیم جاهایی که نیاز نداریم به ورودی اولیه برسیم، از Hash استفاده کنیم. یه نمونه بارز این مساله، کلمات عبور هستش. کاربر کلمه عبوری رو تعیین میکنه، ما اونو Hash میکنیم و در بانک نگه میداریم. هر وقت کاربر خواست Login کنه، ازش کلمه عبور رو میپرسیم. کلمه عبور وارد شده رو Hash میکنیم، و با مقدار ذخیره شده در بانک مقایسه میکنیم. اگر یکی بود، پس کاربر کلمه عبور رو درست وارد کرده.

    اگر به System.Security.Cryptography Namespace رجوع کنید، کلاسی با نام HashAlgorithm میبینید که در واقع Base Class ای هستش برای کلاسهایی که با الگوریتمهای متفاوت می تونن Hash تولید کنن. این الگوریتمها عبارتند از MD5، MD160، SHA1، SHA256، SHA384 و SHA512. کلاسهای متانظر با این الگوریتمها هم در C#‎ عبارتند از :


    System.Security.Cryptography.MD5
    System.Security.Cryptography.RIPEMD160
    System.Security.Cryptography.SHA1
    System.Security.Cryptography.SHA256
    System.Security.Cryptography.SHA384
    System.Security.Cryptography.SHA512


    اما ممکنه بپرسید که اگه کاربر کلمه عبور رو فراموش کرد چی؟ در چنین حالتهایی، لینک Reset Password رو برای کاربر ارسال می کنن...

    اما نکته آخر. بسیاری از برنامه نویسان کلمات عبور رو بروش فوق الذکر Hash و در بانکها ذخیره میکردن. ممکن بود دو کاربر کلمه LOVE رو بعنوان کلمه عبور خودشون انتخاب کنن، که طبیعتا Hash Value یکسانی داشت. وقتی بانک دست مهاجم می افتاد، مهاجم با روشها و Dictionary های متفاوتی که بعنوان ابزار در اختیار داشت، با نگاهی ساده به بانک متوجه فراوانی تکرار Hash Value ها میشد. مثلا، میدید کلمه XDF$#^ صد بار در بانک تکرار شده. اون میدونست که بیشترین تعداد کاربرها کلمه LOVE رو بعنوان کلمع عبور خودشون انتخاب میکنن، پس با چند تلاش ساده میدید که میتونه به سیستم Login کنه. اون یه Password رو در واقع پیدا کرده، اما صد کاربر ازین مساله متضرر شدن!

    برای اینکه این اتفاق نیفته، گفتن که ازین به بعد یه رشته کاملا Random رو به کلمه عبور اضافه میکنیم، بعد کلمه جدید رو Hash میکنیم. (به اون رشته تصادفی Salt Value میگن). به این ترتیب اگر دو کاربر متفاوت کلمه عبور یکسانی هم داشته باشن، این مساله از دید مهاجم پنهان خواهد بود. کلاس RandomNumberGenerator نیز در C#‎ به این منظور استفاده میشه.

    نتیجه:
    حتما از توابع Hash برای Hash نمودن کلمه عبور استفاده کنید و حتما کلمه عبور رو با Salt Value ترکیب کنید تا مشکلات فوق الذکر رخ نده.

  4. #4
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    اگه از sql server 2005 استفاده میکنی، راحت ترین راه اینه که توسط کد زیر اطلاعاتتو به صورت رمزنگاری شده در دیتابیس ذخیره کنی :
    DECLARE @Password NVARCHAR(100)
    SET @Password='MyStrongPassword_*&^g768$%'

    INSERT EncTest VALUES(
    EncryptByPassPhrase(@Password, '111-222-333-444'))


    اینطوری هم میتونی از حالت رمز درش بیاری و نمایش بدی :
    DECLARE @Password NVARCHAR(100)
    SET @Password='MyStrongPassword_*&^g768$%'
    SELECT CAST(DecryptByPassPhrase(@Password,CCNo) AS VARCHAR(MAX)) FROM EncTest


    لازم به ذکره که فیلد CCNo، فیلدی هست که در جدول به صورت رمزشده در اومده.

  5. #5

    سلام

    قبل از هر چیزی از شما دوستان تشکر می کنم
    ولی دوست عزیز قسمت دوم Tsql که نوشتید اجرا نمی شود

  6. #6
    کاربر دائمی آواتار ir_programmer
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    خوزستان، استاني كه سرمايه اش در خدمت استانهاي ديگر است.
    پست
    420
    این فایل رمز نگاری رو attach کردم.
    این طرز استفادش:


    Private Function EncryptStr(ByVal InputStr As String) As String


    Dim KeyWord As String = "ir_programmer"

    Crypto.Encoding = Crypto.EncodingType.HEX
    Crypto.EncryptionAlgorithm = Crypto.Algorithm.RSA
    Crypto.Key = KeyWord

    If Crypto.EncryptString(InputStr) Then
    Return Crypto.Content
    Else
    Return Crypto.CryptoException.Message
    End If

    End Function

    Private Function DecryptStr(ByVal InputStr As String) As String

    Dim keyWord As String = "ir_programmer"

    Crypto.Encoding = Crypto.EncodingType.HEX
    Crypto.EncryptionAlgorithm = Crypto.Algorithm.RSA
    Crypto.Key = keyWord
    Crypto.Content = InputStr
    If Crypto.DecryptString Then
    Return Crypto.Content
    Else
    Return Crypto.CryptoException.Message
    End If

    End Function
    فایل های ضمیمه فایل های ضمیمه

  7. #7
    کدی که دوست عزیزمون ir_programer زحمتش و کشیدن رو تبدیل به کنترل کردم تا به راحتی در #C استفاده بشه. همراه با مثال میفرستم
    فایل های ضمیمه فایل های ضمیمه

  8. #8
    کد رمز شده در مورد بالا خیلی طولانی هست و در این مورد از کلید هم استفاده نشده

    من این مورد را ترجیح میدم در ضمن در این لینک حتی میشه فایل را هم رمز کرد
    https://barnamenevis.org/showth...t=85635&page=3

  9. #9
    نقل قول نوشته شده توسط ir_programer مشاهده تاپیک

    Dim keyWord As String = "ir_programmer"
    دوست من هم از کلید استفاده شده و هم اینکه تنوع Encrypt کردنش هم زیاده فکر کنم 10 تا الگوریتم برا رمزنگاری داره.
    هم کلید و هم نوع رمزنگاری به عنوان پارامتر در کتدهای Encryption و Dectription کنترلی که ساختم ارسال میشوند.

  10. #10
    نقل قول نوشته شده توسط mehdi6755 مشاهده تاپیک
    سلام.
    Encrypt کردن کلمات عبور کار مناسبی نیست، اگر چه بهتر از نگهداری اونها بصورت Clear هستش. اما واقعیت اینه که نه مدیر سیستم و نه کاربران، هرگر نیازی ندارن تا به کلمه عبور اصلی برسن. اجازه بدید با یه مثال منظورم رو بیان کنم. فرض کنید که کاربری کلمه عبور خودش رو به گفته شما tr123 گذاشته. این کلمه رو من بصورت XDF$#^ در بانک ذخیره میکنم، و برای این تبدیل از تابعی ریاضی استفاده کردم که بازگشت ناپذیره. به توابعی که ورودیهای باینری به طول دلخواه رو به خروجیهای باینری با طولهای کوچکتر و اندازه ثابت تبدیل می کنن، Hash Function یا تابع hash میگن. به خروجی هم Hash Value گفته میشه. در عمل، پیدا کردن دو ورودی متفاوت که باعث تولید خروجی یکسانی توسط تابع hash بشه، غیر ممکنه. (اگر چه مثال Mashiharu، نمونه نقضی برای این موضوع بود). بعبارت دیگه، شما نمیتونید یه ورودی دیگه به تابع hash بدید و همون خروجی ( XDF$#^) رو بگیرید.

    این مساله به ما کمک میکنه تا بتونیم جاهایی که نیاز نداریم به ورودی اولیه برسیم، از Hash استفاده کنیم. یه نمونه بارز این مساله، کلمات عبور هستش. کاربر کلمه عبوری رو تعیین میکنه، ما اونو Hash میکنیم و در بانک نگه میداریم. هر وقت کاربر خواست Login کنه، ازش کلمه عبور رو میپرسیم. کلمه عبور وارد شده رو Hash میکنیم، و با مقدار ذخیره شده در بانک مقایسه میکنیم. اگر یکی بود، پس کاربر کلمه عبور رو درست وارد کرده.

    اگر به System.Security.Cryptography Namespace رجوع کنید، کلاسی با نام HashAlgorithm میبینید که در واقع Base Class ای هستش برای کلاسهایی که با الگوریتمهای متفاوت می تونن Hash تولید کنن. این الگوریتمها عبارتند از MD5، MD160، SHA1، SHA256، SHA384 و SHA512. کلاسهای متانظر با این الگوریتمها هم در C#‎ عبارتند از :


    System.Security.Cryptography.MD5
    System.Security.Cryptography.RIPEMD160
    System.Security.Cryptography.SHA1
    System.Security.Cryptography.SHA256
    System.Security.Cryptography.SHA384
    System.Security.Cryptography.SHA512


    اما ممکنه بپرسید که اگه کاربر کلمه عبور رو فراموش کرد چی؟ در چنین حالتهایی، لینک Reset Password رو برای کاربر ارسال می کنن...

    اما نکته آخر. بسیاری از برنامه نویسان کلمات عبور رو بروش فوق الذکر Hash و در بانکها ذخیره میکردن. ممکن بود دو کاربر کلمه LOVE رو بعنوان کلمه عبور خودشون انتخاب کنن، که طبیعتا Hash Value یکسانی داشت. وقتی بانک دست مهاجم می افتاد، مهاجم با روشها و Dictionary های متفاوتی که بعنوان ابزار در اختیار داشت، با نگاهی ساده به بانک متوجه فراوانی تکرار Hash Value ها میشد. مثلا، میدید کلمه XDF$#^ صد بار در بانک تکرار شده. اون میدونست که بیشترین تعداد کاربرها کلمه LOVE رو بعنوان کلمع عبور خودشون انتخاب میکنن، پس با چند تلاش ساده میدید که میتونه به سیستم Login کنه. اون یه Password رو در واقع پیدا کرده، اما صد کاربر ازین مساله متضرر شدن!

    برای اینکه این اتفاق نیفته، گفتن که ازین به بعد یه رشته کاملا Random رو به کلمه عبور اضافه میکنیم، بعد کلمه جدید رو Hash میکنیم. (به اون رشته تصادفی Salt Value میگن). به این ترتیب اگر دو کاربر متفاوت کلمه عبور یکسانی هم داشته باشن، این مساله از دید مهاجم پنهان خواهد بود. کلاس RandomNumberGenerator نیز در C#‎ به این منظور استفاده میشه.

    نتیجه:
    حتما از توابع Hash برای Hash نمودن کلمه عبور استفاده کنید و حتما کلمه عبور رو با Salt Value ترکیب کنید تا مشکلات فوق الذکر رخ نده.


    سلام
    من برای رمزنگاری از توابع Hash استفاده می کنم و مشکل تشایه کلمات عبور رو دارم.
    اگه بخوام اینطور که شما می گین از SaltValue به طور رندم استفاده کنم و Password رو با این SaltValue کد کنم، چه طوری در هنگام login کاربر به سایت دوباره همون Saltvalue رو تولید کنم؟ ( من از MD5 استفاده می کنم)
    یا شایدم باید کار دیگه ای بکنم؟

  11. #11
    سلام به همه
    من خودم در جواب سوال قبلی خودم این لینک رو پیدا کردم . شاید به درد شمام بخوره. به نظر خودم که کدهای جالبی بودن :

    http://www.obviex.com/samples/hash.aspx#Output

  12. #12

    Cool استفاده از MD5 Crypto Service Provider

    شما می تونیم از تابع زیر استفاده کنین ، به این صورت که برای اولین بار که می خواین کلمه رمز را ذخیره کنین رشته وارد شده را به تابع زیر داده و مقدار برگشتی را در دیتا بیس ذخیره کنین ( اینم دقت کنین که طول آرایه 16 تا می باشد، و فیلد رمز عبور در دیتابیس binary با طول 16 تعریف کنین)
    در دفعات بعد هنگامی که کاربر کلمه عبور را وارد کرد، بازهم با استفاده از تابع زیر آنرا Enrypt کنین و نتیجه را با مقدارای که در دیتابیس ذخیره کردین مقایسه کنین. (برای ذخیره کلمه عبور نیازی نیست از روش های رمزنگاری دوطرفه استفاده کنین)


    private byte[] StringToMD5(string password)
    {
    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
    UTF8Encoding utf8 = new UTF8Encoding();
    byte[] bytePass = new byte[16];
    bytePass = md5.ComputeHash(utf8.GetBytes(password));
    return bytePass;
    }

  13. #13
    با کمال تشکر از ir_programmer

    در مورد اینکه فایل های private.key , public.key کنار exe ایجاد می شه آیا این فایل ها قابل استفاده برای هکر ها هستند یا اینکه محتویات آنرا باید در داخل برنامه قرار دهیم ؟

  14. #14
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    به Membership یک نگاه بندازید

  15. #15
    آقا این خروجیش خیلی طولانی هست. من میخوام از این برای تولید serial number استفاده کنم. تابعی نیست که خروجیش خیلی کوتاه باشه؟

    نقل قول نوشته شده توسط hassan razavi مشاهده تاپیک
    کدی که دوست عزیزمون ir_programer زحمتش و کشیدن رو تبدیل به کنترل کردم تا به راحتی در #C استفاده بشه. همراه با مثال میفرستم

  16. #16
    نقل قول نوشته شده توسط alirzn مشاهده تاپیک
    آقا این خروجیش خیلی طولانی هست. من میخوام از این برای تولید serial number استفاده کنم. تابعی نیست که خروجیش خیلی کوتاه باشه؟

    نقل قول نوشته شده توسط babak23 مشاهده تاپیک
    کد رمز شده در مورد بالا خیلی طولانی هست و در این مورد از کلید هم استفاده نشده
    من این مورد را ترجیح میدم در ضمن در این لینک حتی میشه فایل را هم رمز کرد
    https://barnamenevis.org/showth...t=85635&page=3

    جواب
    https://barnamenevis.org/showth...t=85635&page=3[/quote

  17. #17
    میتونی از تابع gethashcode هم استفاده کنی

  18. #18
    کاربر جدید آواتار arman_bay2002
    تاریخ عضویت
    بهمن 1385
    محل زندگی
    بابلسر
    پست
    20

    من نوشتمش ولی به زبان VB2008

    به آدرس زیر یه سر بزن
    https://barnamenevis.org/showthread.php?t=113861
    بو حال کن

  19. #19

    نقل قول: اینکریپت کردن کلمه عبور

    نقل قول نوشته شده توسط hassan razavi مشاهده تاپیک
    کدی که دوست عزیزمون ir_programer زحمتش و کشیدن رو تبدیل به کنترل کردم تا به راحتی در C#‎‎‎ استفاده بشه. همراه با مثال میفرستم
    ممنون از لطفتون
    من پسورد دیتا بیس ام رو با برنامه شما کد کردم
    بعد برای DeCode کردنش تو برنامه خودم کد زدم
    قبلش dll رو به برنامه ام اضافه کردم بعداون قسمت decrypet رو به صورت زیر نوشتم
    البته من همیشه یه کلاس بنام Class_SQLConnection دارم که همیشه از اونجا به دیتا بیس وصل میشم...:

    class Class_SQLConnection
    {
    public enum EncodingType
    {HEX = 0,
    BASE_64 = 1}
    public enum Algorithm
    {SHA1 = 0,
    SHA256 = 1,
    SHA384 = 2,
    Rijndael = 3,
    TripleDES = 4,
    RSA = 5,
    RC2 = 6,
    DES = 7,
    //DSA = 8
    MD5 = 9,
    RNG = 10,
    //Base64 = 11
    SHA512 = 12}
    public static SqlConnection con;
    public static void StrCon()
    {con = new SqlConnection();
    string s = Bills.Properties.Settings.Default.BillDBConnection String;
    int index = s.IndexOf("Password=");
    string str = s.Substring(0, index + 9);
    string pwd = (s.Substring(index + 9, s.Length - index - 9));
    CryptoCntrol.CryptCtrl cc = new CryptoCntrol.CryptCtrl();
    string p = cc.DeCryption(pwd, "Hassan", (int)EncodingType.HEX, (int)Algorithm.RSA);
    str += p;
    con.ConnectionString = str;}}


    ولی جواب نمیده...
    فکر میکنم کار دیگه ایی باید انجام میدادم که جا افتاده...
    لطفا راهنماییم کنید

  20. #20
    کاربر دائمی
    تاریخ عضویت
    آبان 1385
    محل زندگی
    تهران
    پست
    1,112

    نقل قول: اینکریپت کردن کلمه عبور

    سلام
    من برای رمزنگاری از توابع Hash استفاده می کنم و مشکل تشایه کلمات عبور رو دارم.
    اگه بخوام اینطور که شما می گین از SaltValue به طور رندم استفاده کنم و Password رو با این SaltValue کد کنم، چه طوری در هنگام login کاربر به سایت دوباره همون Saltvalue رو تولید کنم؟ ( من از MD5 استفاده می کنم)
    یا شایدم باید کار دیگه ای بکنم؟
    http://www.dotnetspider.com/resource...ncryption.aspx

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

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