بالنظر إلى اسم الملف، كيف يمكنني الحصول على Adler32 باستخدام Crypto++

StackOverflow https://stackoverflow.com/questions/827634

سؤال

بالنظر إلى "اسم ملف السلسلة"، كيف يمكنني الحصول على المجموع الاختباري Adler32 باستخدام مكتبة C++ Crypto++.أنا في حيرة من أمري بشأن استخدام نظام المصدر والحوض الخاص بهم.

يوجد أدناه هيكل عظمي للكود الذي يستخدم MD5، ولكن يبدو أنه لا يمكنني العثور على أي أمثلة أو برامج تعليمية حول استخدام Adler32.

string filename = "/tmp/data.txt"
string file_adler32_digest;
string file_md5_digest;

MD5 hashMD5;

FileSource fs( filename.c_str(), 
              true, 
              new HashFilter( hashMD5, 
              new HexEncoder( new StringSink( file_md5_digest ) ) ) );

/* Confusion begins here */   

//how do I do the adler32 ?

/* Confusion ends here */

cout << file_adler32_digest << endl
     << file_md5_digest << endl;

عينات جيدة ورمز العينة هنا http://www.cryptopp.com/wiki/Category:Sample لجميع Crypto++ (باستثناء عناصر Adler32 التي أريدها)

هل كانت مفيدة؟

المحلول

إذا اتبعت هذا http://www.cryptopp.com/wiki/HashFilter, ، يجب عليك تغيير hashMD5 إلى hashAdler32، ​​و file_md5_digest إلى file_adler32_digest

Adler32 hashAdler32;

FileSource( filename.c_str(), 
            true, 
            new HashFilter( hashAdler32, 
            new HexEncoder( new StringSink( file_adler32_digest ) ) ) );

بعد هذا file_adler32_digest يجب أن يحتوي على التجزئة المطلوبة.

نصائح أخرى

<اقتباس فقرة>   

و.. بشيء من الارتباك حول استخدام النظام المصدر وغرقت بهم.

وOK. هو من وحي هذا التصميم خاص من قبل نظام الأنابيب يونكس. إذا فهمت أنابيب يونكس وكيف يتدفق doata من خلال ذلك، فإنك تفهم تشفير ++ خط أنابيب .

وعلى سبيل المثال، يونكس التالي الأوامر:

cat somefile.bin | hexdump

وسيصبح البرنامج التالي تشفير ++:

FileSource fs("somefile.bin", true /*pumpAll*/, new HexEncoder(new FileSink(cout)));

<اقتباس فقرة>   

ولدي هيكل عظمي من التعليمات البرمجية التي لا MD5، ولكن أنا بحاجة لرمز ... لAdler32 ...

وكما أظهرت إسماعيل أنت، ه بسيطة مثل:

Adler32 adler32;
string digest;

FileSource fs(filename.c_str(),  true /*pumpAll*/, 
              new HashFilter(adler32, 
                    new HexEncoder(
                        new StringSink(digest))));

ولكن هنا البصيرة: في تشفير ++، تدفق البيانات من مصادر لل<أ href ل = "http://www.cryptopp.com/wiki/Category:Sink" يختلط = "نوفولو"> المصاريف . في بين، فإنه سوف تواجه التي تحول البيانات.

وفوق، لديك اثنين من المرشحات: ل HashFilter و في HexEncoder . جميع المرشحات وترث من BufferedTransformation ، لذلك كل ما يمكن بالسلاسل معا بطريقة متسقة.

وAdler32 حد ذاته ليس التصفية. ولكنه يرث من HashTransformation ، وهذا ما <لأ href = "HTTP: // شبكة الاتصالات العالمية. cryptopp.com/wiki/HashFilter "يختلط =" نوفولو "> HashFilter يستخدم. حتى تتمكن من تبديل في أي HashFilter الكائن مقرها والأمور ستسير فقط.

ويمكنك العثور على قائمة HashFilter الكائن مقرها في <لأ href = "HTTP: / /www.cryptopp.com/docs/ref/class_hash_transformation.html "يختلط =" نوفولو "> HashTransformation الدرجة المرجعي . وهي تشمل جميع التجزئة (مثل MD5، SHA والدوامة)، Adler32 وCRC32.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top