আমার একটি সাধারণ প্রশ্ন রয়েছে যখন আমার কোনও এসএইচএল হ্যাশের ফলাফল কোনও মাইএসকিউএল ডাটাবেসে সংরক্ষণ করতে চাইলে এমনটি ঘটেছিল:
আমি হ্যাশটির ফলাফল সংরক্ষণ করি যেখানে ভর্চারের ক্ষেত্রটি আর কতদিন হওয়া উচিত ?
আমার একটি সাধারণ প্রশ্ন রয়েছে যখন আমার কোনও এসএইচএল হ্যাশের ফলাফল কোনও মাইএসকিউএল ডাটাবেসে সংরক্ষণ করতে চাইলে এমনটি ঘটেছিল:
আমি হ্যাশটির ফলাফল সংরক্ষণ করি যেখানে ভর্চারের ক্ষেত্রটি আর কতদিন হওয়া উচিত ?
উত্তর:
আমি VARCHAR
পরিবর্তনশীল দৈর্ঘ্যের ডেটার জন্য ব্যবহার করব তবে স্থির দৈর্ঘ্যের ডেটা নয়। যেহেতু একটি SHA-1 মান সর্বদা 160 বিট লম্বা হয়, তবে স্থির দৈর্ঘ্যের ক্ষেত্রের দৈর্ঘ্যের জন্যVARCHAR
কেবল একটি অতিরিক্ত বাইট নষ্ট করবে ।
এবং আমি মানটি SHA1
ফিরিয়ে আনব না returning কারণ এটি প্রতি চরিত্রের জন্য মাত্র 4 বিট ব্যবহার করে এবং এর জন্য 160/4 = 40 টি অক্ষর প্রয়োজন। তবে আপনি যদি প্রতি চরিত্রে 8 বিট ব্যবহার করেন তবে আপনার কেবল 160/8 = 20 অক্ষরের দীর্ঘ ক্ষেত্রের প্রয়োজন হবে।
সুতরাং আমি আপনাকে ব্যবহার BINARY(20)
এবং UNHEX
ফাংশনটিSHA1
বাইনারি রূপান্তর করতে ফাংশন প্রস্তাব ।
আমি BINARY(20)
এবং এর জন্য স্টোরেজ প্রয়োজনীয়তার তুলনা করেছি CHAR(40)
।
CREATE TABLE `binary` (
`id` int unsigned auto_increment primary key,
`password` binary(20) not null
);
CREATE TABLE `char` (
`id` int unsigned auto_increment primary key,
`password` char(40) not null
);
মিলিয়ন রেকর্ডের সাথে binary(20)
44.56M লাগে, যখন char(40)
লাগে 64.57M।
InnoDB
ইঞ্জিন।
UNHEX()
ম্যানুয়ালি স্কয়ারে যুক্ত করলেই কাজ করবে ।
একটি SHA1 হ্যাশ 40 টি চর দীর্ঘ!
রেফারেন্স এই ব্লগ থেকে নেওয়া:
নীচে হ্যাশিং অ্যালগরিদম এর প্রয়োজনীয় বিট আকারের একটি তালিকা রয়েছে:
প্রয়োজনীয় CHAR (এন) সহ একটি নমুনা সারণী তৈরি করা হয়েছে:
CREATE TABLE tbl_PasswordDataType
(
ID INTEGER
,MD5_128_bit CHAR(32)
,SHA_160_bit CHAR(40)
,SHA_224_bit CHAR(56)
,SHA_256_bit CHAR(64)
,SHA_384_bit CHAR(96)
,SHA_512_bit CHAR(128)
);
INSERT INTO tbl_PasswordDataType
VALUES
(
1
,MD5('SamplePass_WithAddedSalt')
,SHA1('SamplePass_WithAddedSalt')
,SHA2('SamplePass_WithAddedSalt',224)
,SHA2('SamplePass_WithAddedSalt',256)
,SHA2('SamplePass_WithAddedSalt',384)
,SHA2('SamplePass_WithAddedSalt',512)
);
সুতরাং দৈর্ঘ্য 10 16-বিট অক্ষর এবং 40 হেক্স অঙ্কের মধ্যে is
যে কোনও ক্ষেত্রে আপনি যে ফর্ম্যাটটি সঞ্চয় করতে যাচ্ছেন তা স্থির করুন এবং সেই বিন্যাসের ভিত্তিতে ক্ষেত্রটিকে একটি নির্দিষ্ট আকার করুন make এইভাবে আপনার কোনও নষ্ট স্থান থাকবে না।
আপনি এখনও ব্যবহারকারীদের জন্য হ্যাশ সর্বদা সংরক্ষণ না করে (যেমন অ্যাকাউন্টগুলি প্রমাণীকরণ / লগইন ইউআরএল ভুলে গেছেন) সেই ক্ষেত্রেও উইচারআর ব্যবহার করতে পারেন। একবার কোনও ব্যবহারকারী তাদের লগইন তথ্যকে প্রমাণীকরণ / পরিবর্তন করে ফেললে তারা হ্যাশ ব্যবহার করতে সক্ষম হবে না এবং এর কোনও কারণ নেই should অস্থায়ী হ্যাশ -> ব্যবহারকারী সংঘগুলি মুছতে পারে এমন সংরক্ষণের জন্য আপনি একটি পৃথক টেবিল তৈরি করতে পারেন তবে আমার মনে হয় না বেশিরভাগ লোকেরা এটি করতে বিরক্ত করে।
আপনার যদি sha1 কলামে একটি সূচি প্রয়োজন হয়, আমি পারফরম্যান্স কারণে CHAR (40) প্রস্তাব করি। আমার ক্ষেত্রে sha1 কলামটি একটি ইমেল নিশ্চিতকরণ টোকেন তাই ল্যান্ডিং পৃষ্ঠায় কোয়েরিটি কেবল টোকেন দিয়ে প্রবেশ করে। এক্ষেত্রে আমার মতে আইএনডেক্সের সাথে চার (40) হ'ল সেরা পছন্দ :)
আপনি যদি এই পদ্ধতিটি অবলম্বন করতে চান তবে মনে রাখবেন $ কাঁচা_আউটপুট = মিথ্যা।