View Full Version : سوال: كمك براي كوئري براساس فيلد encrypt شده؟
Afshin160
چهارشنبه 10 تیر 1388, 13:45 عصر
سلام ..
يه سوال :فيلد پسورد من از نوع nvarchar(50 ) است و من يه srting كه در واقع encrypt شده در برنامه است را در آن ميريزم ولي حال كه مي خواهم براساس اون string كه encrypt شده جستجو مي كنم كوئري من چيزي برنمي گرداند .
توجه اين string طرف برنامه encrypt شده وبه صورت رشته اي در ديتابيس ذخيره شده.
چرا ؟
select * from dbo.users
where users.password='NAA۴ADMANwA١ADAA'
اين NAA۴ADMANwA١ADAA كد شده عددي است.
با كمال تشكر
afshin160
CATGAUDY
چهارشنبه 10 تیر 1388, 18:18 عصر
سلام ..
بچه ها منم به اين مشكل برخوردم و نتونستم كاري كنم و از خيرش گذشتم ...
كسي راه حلي به ذهنش ميرسه ...
AminSobati
چهارشنبه 10 تیر 1388, 21:09 عصر
سلام دوست عزیزم،
شما وقتی String رو از کاربر دریافت میکنید، میبایست Encrypt کنین و بعد با جدول مقایسه کنین. البته این رو جهت اطمینان نوشتم، چون به نظر میرسه رعایت کردین. در نسخه 2008 میتونین Trace کنین تا ببینین اطلاعات به چه شکلی به کد TSQL شما میرسند
Afshin160
پنج شنبه 11 تیر 1388, 10:53 صبح
با سلام خدمت استاد خودم آقاي امين ثباتي
امين جان sql2008 ندارم . ولي دقيقا" مقداردرون فيلد من NAA۴ADMANwA١ADAA اين مقدار هم و مقداري كه از برنامه هم به sql پاس ميشه همين مقداره ...
حتي من در خود sql هم اين كوئري كه درپست اول نوشتم را مي نويسم چيزي برنمي گردانه ...
برام واقعا" جاي تعجب داره چون همه چيز درست داره كار مي كنه فقط انگار با رشته encrypt شده مشكل داره ....
__H2__
پنج شنبه 11 تیر 1388, 13:15 عصر
سلام
- یا از مشکل بزرگی و کوچکی حروف است
- یا شاید در دیتابیس قبل و بعد از کلمه مورد نظر چند space قرار گرفته باشد.
- کلمه password هم یک نموره واژه کلیدی حساب میشود!
- معمولاً قبل از مقادیر یونیکدی برای nchar و nvarchar و ntext از یک N استفاده میکنند، البته روش نهایی و مناسب استفاده از روش ارسال پارامتری است.
موقتاً دستور زیر را هم یک تست کنید:
SELECT * FROM [users] WHERE ([password]=N'NAA۴ADMANwA١ADAA');
در صورت نیاز میتوانید از توابع LOWER و LTRIM و RTRIM هم استفاده کنید.
یکجورهایی امکان ندارد همچین دیتایی داشته باشید و دستور فوق پیدایش نکند!!!
لطفاً دقت بیشتری کنید و در صورت ادامه مشکل فقط و فقط فایل دیتابیس را اگر میتوانید آپلود کنید!!
=====
چند نکته مفید ...
اگر از الگوریتم های مرسوم استفاده کرده باشید ...
- اصولاً رمزنگاری username (همه یا با حروف کوچک و یا بزرگ) و password به صورت جفت و با هم مناسب تر اس.
- خروجی رمزنگاری شده همواره تعداد کاراکتر ثابتی خواهد داشت و شاید بهتر باشد در جهت سرعت به جای nvarchar و varchar از nchar و char استفاده کنید.
- خروجی از رمزنگاری ها پس از string شدن معمولاً Base32/64 است که فاقد دیتای یونیکدی است و میتوانید باز از جهت سرعت و حافظه صرفه جویی کنید و به جای nvarchar و nchar از varchar و char استفاده کنید که ascii هستند.
- در نهایت شاید عدم تبدیل به string محاسن بیشتری داشته باشد!
دیتایی که در ذات باینری است را چرا باید زورکی با base64 به string تبدیل کرد و یک پردازش تبدیلی و مقایسه ای اضافه تحمیل کرد؟
داده های باینری بیشتر حالت غیر قابل نمایش دارند و این شاید بهتر باشد
داده های باینری عموماً سرعت محاسباتی و مقایسه ای بیشتری هم دارند
داده های باینری فضای کمتری از RAM را هم اشغال میکنند.
به نظر من شما میتوانید از الگوریتم هایی زیر و نوع های متغییر زیر با کمترین پردازش و بیشترین بازدهی استفاده کنید:
SHA1 و (binary(20
SHA256 و (binary(32
SHA386 و (binary(48
SHA512 و (binary(64
=====
موفق باشید.
Afshin160
پنج شنبه 11 تیر 1388, 13:36 عصر
واقعا" متشكرم
select شما جواب داد .
من فكر مي كردم N فقط بايد قبل از كلمات فارسي بكار برد .
فقط مشكل اين N بود !!!! اصلا" فكرشم نمي كردم ...... !!!!!
باز هم متشكرم
هميشه راهنمايي شما برام مفيد واقع شده .
موفق و تندرست باشيد.
افشين160
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.