সিআরসি 32 চেকসাম কীভাবে গণনা করা হয়?


105

হতে পারে আমি কেবল এটি দেখছি না, তবে সিআরসি 32 অযথা জটিল বলে মনে হচ্ছে বা ওয়েবে আমি যে কোনও জায়গায় খুঁজে পেলাম বলে অপর্যাপ্তভাবে ব্যাখ্যা করেছে explained

আমি বুঝতে পারি যে এটি (জেনারেটর) বহুপদী দ্বারা বিভক্ত বার্তার মানটির অ-বহন-ভিত্তিক গাণিতিক বিভাগ থেকে অবশিষ্ট, তবে এর আসল বাস্তবায়ন আমার হাত থেকে রক্ষা পায়।

আমি সিআরসি ত্রুটি সনাক্তকরণ অ্যালগরিদমগুলিতে একটি ব্যথাহীন গাইড পড়েছি এবং আমি অবশ্যই বলব যে এটি ব্যথাহীন ছিল না। এটি তত্ত্বটি বরং আরও ভালভাবে যায় তবে লেখক কখনও সাধারণের কাছে যায় না "এটি এটি" " তিনি বলেন যে স্ট্যান্ডার্ড সিআরসি 32 অ্যালগরিদমের জন্য প্যারামিটারগুলি কী, তবে আপনি কীভাবে এটি পেলেন তা পরিষ্কারভাবে প্রকাশ করতে তিনি এড়িয়ে যান।

আমাকে যে অংশটি পাওয়া যায় তা হ'ল তিনি যখন "এটি এটি" তখন এবং আরও যোগ করেন, "ওহ উপায় দ্বারা, এটি বিপরীত হতে পারে বা বিভিন্ন প্রাথমিক শর্ত দিয়ে শুরু করা যেতে পারে," এবং চূড়ান্ত উপায়টি কী সম্পর্কে একটি পরিষ্কার উত্তর দেয় না doesn't তিনি স্রেফ যুক্ত হওয়া সমস্ত পরিবর্তনের প্রদত্ত একটি সিআরসি 32 চেকসাম গণনা করার।

  • কীভাবে সিআরসি 32 গণনা করা হয় তার একটি সহজ ব্যাখ্যা আছে?

আমি সিটিতে কোডটি দেওয়ার চেষ্টা করেছি যে টেবিলটি কীভাবে তৈরি হয়:

for (i = 0; i < 256; i++)
{
    temp = i;

    for (j = 0; j < 8; j++)
    {
        if (temp & 1)
        {
            temp >>= 1;
            temp ^= 0xEDB88320;
        }
        else {temp >>= 1;}
    }
    testcrc[i] = temp;
}

তবে এটি ইন্টারনেটে অন্য কোথাও খুঁজে পাওয়া মানগুলির সাথে অসামঞ্জস্যপূর্ণ মান উত্পন্ন করে বলে মনে হচ্ছে। আমি যে মূল্যবোধগুলি অনলাইনে পেয়েছি তা ব্যবহার করতে পারি, তবে কীভাবে সেগুলি তৈরি হয়েছিল তা আমি বুঝতে চাই।

এই অবিশ্বাস্যরকম বিভ্রান্তিকর সংখ্যাগুলি সাফ করার জন্য যে কোনও সহায়তা খুব প্রশংসিত হবে।


9
CRC32 টেবিল তৈরি করার জন্য আপনার কোডটি সঠিক বলে মনে হচ্ছে। তোমার lsbit-প্রথম ( বিপরীত ) CRC32 বহুপদী এর 0xEDB88320আরো msbit-প্রথম (লেখা যেতে পারে স্বাভাবিক ) হিসেবে 0x04C11DB7। একই সিআরসি বহুপদী ব্যবহার করে আপনি অন্য কোথাও উত্পন্ন টেবিলের মানগুলি খুঁজে পেয়েছিলেন?
jschmier

4
@jschmier হাই, আমি এই লোকটি প্রশ্ন জিজ্ঞাসার পিছনে একটি পদক্ষেপের মত মনে হয়? stackoverflow.com/questions/62168128/...
bluejayke

অন্য কেউ যদি উপরের সাথে লিঙ্কিত "সিআরসি ত্রুটি সনাক্তকরণের অ্যালগরিদমগুলিতে একটি বেদনাবিহীন গাইড" পড়তে আগ্রহী হন তবে সেই মূল ইউআরএলটি হজড হয় তবে গুগল সহজেই এইগুলি
স্টাফেন

উত্তর:


120

সিআরসি 32 এর বহুপদীটি হ'ল:

এক্স 32 + এক্স 26 + এক্স 23 + এক্স 22 + এক্স 16 + এক্স 12 + এক্স 11 + এক্স 10 + এক্স 8 + এক্স 7 + এক্স 5 + এক্স 4 + এক্স 2 + এক্স + 1

বা হেক্স এবং বাইনারি মধ্যে:

0x 01 04 C1 1D বি 7
1 0000 0100 1100 0001 0001 1101 1011 0111

সর্বোচ্চ শব্দটি (x 32 ) সাধারণত স্পষ্টভাবে লিখিত হয় না, সুতরাং এটি পরিবর্তে ঠিক হেক্সে উপস্থাপন করা যেতে পারে

0x 04 সি 1 1 ডি বি 7

1 এবং 0 এর গণনা নির্দ্বিধায় মনে হয় তবে আপনি দেখতে পাবেন যে সেগুলি বহুবর্ষের সাথে মিলছে, যেখানে 1বিট 0 (বা প্রথম বিট) এবং xবিট 1 (বা দ্বিতীয় বিট) রয়েছে।

কেন এই বহুপদী? কারণ সেখানে একটি বহির্ভুত প্রদত্ত একটি স্ট্যান্ডার্ড থাকা দরকার এবং স্ট্যান্ডার্ডটি আইইইই 802.3 দ্বারা সেট করা হয়েছিল। এছাড়াও এমন একটি বহুপদী খুঁজে পাওয়া অত্যন্ত কঠিন যা কার্যকরভাবে বিভিন্ন বিট ত্রুটিগুলি সনাক্ত করে।

আপনি সিআরসি -32 কে "বাইনারি অ্যারিমেটিক উইথ নো ক্যারি" সিরিজ হিসাবে ভাবতে পারেন বা মূলত "এক্সওআর এবং শিফট অপারেশনস"। একে প্রযুক্তিগতভাবে বহুভুজ সংক্রান্ত গাণিতিক বলা হয়।

এটি আরও ভালভাবে বুঝতে, এই গুণটির কথা ভাবুন:

(x^3 + x^2 + x^0)(x^3 + x^1 + x^0)
= (x^6 + x^4 + x^3
 + x^5 + x^3 + x^2
 + x^3 + x^1 + x^0)
= x^6 + x^5 + x^4 + 3*x^3 + x^2 + x^1 + x^0

যদি আমরা ধরে নিই যে x 2 বেস 2 তখন আমরা পাই:

x^7 + x^3 + x^2 + x^1 + x^0

কেন? কারণ 3x ^ 3 হ'ল 11x ^ 11 (তবে আমাদের কেবল 1 বা 0 প্রাক সংখ্যা প্রয়োজন) তাই আমরা বহন করবো:

=1x^110 + 1x^101 + 1x^100          + 11x^11 + 1x^10 + 1x^1 + x^0
=1x^110 + 1x^101 + 1x^100 + 1x^100 + 1x^11 + 1x^10 + 1x^1 + x^0
=1x^110 + 1x^101 + 1x^101          + 1x^11 + 1x^10 + 1x^1 + x^0
=1x^110 + 1x^110                   + 1x^11 + 1x^10 + 1x^1 + x^0
=1x^111                            + 1x^11 + 1x^10 + 1x^1 + x^0

তবে গণিতবিদরা নিয়মগুলি পরিবর্তন করেছেন যাতে এটি 2 মোড হয় So সুতরাং মূলত কোনও বাইনারি বহুপদী মোড 2 কেবল বহনযোগ্য বা এক্সওআরএস ছাড়া সংযোজন। সুতরাং আমাদের মূল সমীকরণটি দেখে মনে হচ্ছে:

=( 1x^110 + 1x^101 + 1x^100 + 11x^11 + 1x^10 + 1x^1 + x^0 ) MOD 2
=( 1x^110 + 1x^101 + 1x^100 +  1x^11 + 1x^10 + 1x^1 + x^0 )
= x^6 + x^5 + x^4 + 3*x^3 + x^2 + x^1 + x^0 (or that original number we had)

আমি জানি এটি বিশ্বাসের একটি ঝাঁপ তবে এটি লাইন-প্রোগ্রামার হিসাবে আমার সক্ষমতার বাইরে। আপনি যদি কোনও হার্ড-কোর সিএস-শিক্ষার্থী বা ইঞ্জিনিয়ার হন তবে আমি এটিকে ভেঙে ফেলার চ্যালেঞ্জ জানাই। এই বিশ্লেষণ থেকে সবাই উপকৃত হবে।

সুতরাং একটি সম্পূর্ণ উদাহরণ কাজ করতে:

   Original message                : 1101011011
   Polynomial of (W)idth 4         :      10011
   Message after appending W zeros : 11010110110000

এখন আমরা সিআরসি গাণিতিক ব্যবহার করে বহু দ্বারা বর্ধিত বার্তাটি ভাগ করি। এটি পূর্বের মতো একই বিভাগ:

            1100001010 = Quotient (nobody cares about the quotient)
       _______________
10011 ) 11010110110000 = Augmented message (1101011011 + 0000)
=Poly   10011,,.,,....
        -----,,.,,....
         10011,.,,....
         10011,.,,....
         -----,.,,....
          00001.,,....
          00000.,,....
          -----.,,....
           00010,,....
           00000,,....
           -----,,....
            00101,....
            00000,....
            -----,....
             01011....
             00000....
             -----....
              10110...
              10011...
              -----...
               01010..
               00000..
               -----..
                10100.
                10011.
                -----.
                 01110
                 00000
                 -----
                  1110 = Remainder = THE CHECKSUM!!!!

বিভাগটি একটি ভাগফল দেয়, যা আমরা ফেলে দিই এবং একটি অবশিষ্ট অংশ, যা গণনা করা চেকসাম। এটি গণনা শেষ করে। সাধারণত, চেকসামটি বার্তায় যুক্ত হয় এবং ফলাফলটি সঞ্চারিত হয়। এই ক্ষেত্রে সংক্রমণটি হবে: 11010110111110।

কেবলমাত্র আপনার বিভাজক হিসাবে 32-বিট নম্বর ব্যবহার করুন এবং আপনার সম্পূর্ণ স্ট্রিমটিকে আপনার লভ্যাংশ হিসাবে ব্যবহার করুন। ভাগফলকে ফেলে দিন এবং বাকীটি রাখুন। আপনার বার্তার শেষে বাকিটি নিয়ে যান এবং আপনার কাছে একটি সিআরসি 32 রয়েছে have

গড় লোকের পর্যালোচনা:

         QUOTIENT
        ----------
DIVISOR ) DIVIDEND
                 = REMAINDER
  1. প্রথম 32 বিট নিন।
  2. শিফট বিট
  3. যদি 32 বিটগুলি ডিভাইজারের চেয়ে কম হয় তবে দ্বিতীয় ধাপে যান।
  4. ডিভিজোর দ্বারা এক্সওর 32 বিট। পদক্ষেপ 2 এ যান।

(দ্রষ্টব্য যে স্ট্রিমটি 32 বিট দ্বারা বিভাজ্য হতে হবে বা এটি প্যাড করা উচিত For উদাহরণস্বরূপ, একটি 8-বিট এএনএসআই প্রবাহ প্যাড করতে হবে Also এছাড়াও স্ট্রিমের শেষে, বিভাগটি থামানো হয়েছে))


14
শেষে "গড় গাই পর্যালোচনা" এর জন্য +1 - সম্ভবত এটি ডানদিকে উপরে নিয়ে যাওয়া বিবেচনা করুন - এক ধরণের টিএল; DR: P
aaronsnoswell

4
@ অবস্ট্রাক্টেনচার মনে রাখবেন যে আমরা বহুবর্ষগুলি বিভাজন করছি, কেবল বাইনারি সংখ্যা নয়। আমরা "সাধারণ" বিয়োগ করতে পারি না কারণ আমরা $ x ^ {n + 1} $ থেকে "ধার" $ x ^ n $ করতে পারি না; তারা বিভিন্ন ধরণের জিনিস। এছাড়াও, যেহেতু বিটগুলি কেবল 0 বা 1, তাই -1 এমনকি কী হবে? সত্যই, আমরা ক্ষেত্রের e Z / 2Z co সহগের সাথে বহুবচনগুলির বলয়টিতে কাজ করছি, যার কেবল দুটি 0 এবং 1 উপাদান রয়েছে এবং যেখানে $ 1 + 1 = 0 $ রয়েছে $ কফিসিয়েন্টগুলি একটি ক্ষেত্রের মধ্যে রাখার পরে, বহুবচনগুলি ইউক্লিডিয়ান ডোমেন নামে পরিচিত যা মূলত আমরা যা করতে চাইছি সেটি প্রথম স্থানে সুবিন্যস্ত করার অনুমতি দেয়।
calavicci

6
আসল বহুবর্ষটি কেবল স্পষ্ট করে বলতে 100000100110000010001110110110111 = 0x104C11DB7। এমএসবি অন্তর্নিহিত, তবে একটি বাস্তবায়নের ক্ষেত্রে এখনও বিবেচনায় নেওয়া উচিত। যেহেতু এটি সর্বদা সেট করা হবে কারণ বহুবচনটি 33 বিট দীর্ঘ হওয়া প্রয়োজন (যাতে বাকীটি 32 বিট দীর্ঘ হতে পারে) কিছু লোক এমএসবি বাদ দেয়।
ফিলিপ টি।

4
x^6 + x^5 + x^4 + 3*x^3 + x^2 + x^1 + x^0 ... If we assume x is base 2 then we get: x^7 + x^3 + x^2 + x^1 + x^0। গণিতটি এভাবে কাজ করে না। বহুবর্ষের সহগগুলি Mod (2) বা GF (2) হয়, x গুলি একা থাকে, ফলে x ^ 6 + x ^ 5 + x ^ 4 + x ^ 3 + x ^ 2 + x ^ 1 + x ^ 0 (যেহেতু 3 মোড (2) = 1)। Tack the remainder on the end of your message- প্রযুক্তিগতভাবে বাকী বাক্যগুলি 0 টি বিট থেকে বিয়োগ করা হয় যা বার্তায় সংযুক্ত হয়েছিল, তবে এটি যেহেতু মোড (2) গণিত, তাই অ্যাড এবং বিয়োগ উভয়ই এক্সওআর হিসাবে একই, এবং বাকীটির সাথে এক্সওআর'র শূন্য বিট একই বাকি হিসাবে
rcgldr

4
@ মার্কাসজে - Why did you append four 0s though?- সিআরসি গণনা করার জন্য সফ্টওয়্যার অ্যালগরিদমগুলি কার্যকরভাবে 0-এর দশকে যুক্ত করে, যদিও এটি স্পষ্ট নয়। যদি লম্বা হাত বিভাগ ব্যবহার করে সিআরসি গণনা দেখানো হয়, তবে বিভাগের উদাহরণটি সঠিকভাবে উপস্থিত হওয়ার জন্য 0 টি সংযুক্ত করা দরকার।
rcgldr

11

আইইইই 802.3 এর জন্য, সিআরসি -32। পুরো বার্তাটি সিরিয়াল বিট স্ট্রিম হিসাবে ভাবুন, বার্তার শেষে 32 জিরো যুক্ত করুন। এরপরে, আপনাকে বার্তাটির প্রতিটি বাইটের বিটগুলি বিপরীত করতে হবে এবং 1 এর প্রথম 32 টি বিট পরিপূরক করা উচিত। এখন সিআরসি -32 বহুভুজ, 0x104C11DB7 দ্বারা ভাগ করুন। অবশেষে, আপনাকে অবশ্যই 1 টির এই বিভাগের 32-বিট অবশিষ্টের পরিপূরককে অবশ্যই বাকী 4 টি বাইটের বিট-বিপরীত করুন। এটি বার্তাটির শেষে যুক্ত হওয়া 32-বিট সিআরসিতে পরিণত হয়।

এই বিস্ময়কর পদ্ধতির কারণ হ'ল প্রথম ইথারনেট বাস্তবায়ন বার্তাটি একবারে এক বাইটকে সিরিয়ালাইজ করবে এবং প্রতি বাইটের মধ্যে সর্বনিম্ন উল্লেখযোগ্য বিট প্রেরণ করবে। সিরিয়াল বিট স্ট্রিমটি তখন একটি সিরিয়াল সিআরসি -32 শিফট রেজিস্টার গণনার মধ্য দিয়ে যায়, যা কেবলমাত্র পরিপূরক হয়েছিল এবং বার্তাটি শেষ হওয়ার পরে তারের উপরে প্রেরণ করা হয়েছিল। বার্তার প্রথম 32 বিট পরিপূরক হওয়ার কারণটি হ'ল বার্তাটি সমস্ত শূন্য হলেও আপনি কোনও শূন্য সিআরসি পাবেন না।


4
এটি এখনও অবধি এখানে সেরা উত্তর, যদিও আমি 'বাইট বিট-রিভার্স' প্রতিস্থাপন করতাম, সাথে '4 বাইট বিট-রিভার্স করতাম, তাদেরকে একটি সত্তা হিসাবে বিবেচনা করতাম' উদাহরণস্বরূপ 'abcdefgh ijklmnop qrstuvwx yzABCDEF' এ 'FEDCBzy xwvutsrq ponMLkji hgfedcba '। আরও দেখুন: সিআরসি -32 হ্যাশ টিউটোরিয়াল - অটোহটকি সম্প্রদায়
vafylec

4
হাই, কোন "বার্তা" হুবহু; আপনি কি উল্টো? stackoverflow.com/questions/62168128/...
bluejayke

10

একটি সিআরসি বেশ সহজ; আপনি বিটস এবং ডেটা হিসাবে উপস্থাপিত একটি বহুপদী গ্রহণ করেন এবং বহুবচনকে ডেটাতে ভাগ করেন (বা আপনি ডেটাটিকে বহুবচন হিসাবে উপস্থাপন করেন এবং একই জিনিস করেন)। বাকীটি, যা 0 এবং বহুপথের মধ্যে থাকে তা হ'ল সিআরসি। আপনার কোডটি বোঝার জন্য কিছুটা কঠিন, আংশিক কারণ এটি অসম্পূর্ণ: টেম্প এবং টেস্টসিআরসি ঘোষণা করা হয়নি, তাই কী সূচী করা হচ্ছে তা স্পষ্ট নয় এবং অ্যালগরিদমের মাধ্যমে কতটা ডেটা চলছে।

সিআরসি বোঝার উপায় হ'ল সংক্ষিপ্ত বহুবর্ষীয় - 4 বিট, দিয়ে একটি সংক্ষিপ্ত পরিমাণের ডেটা (16 বিট বা তাই) ব্যবহার করে কয়েকটি গণনা করার চেষ্টা করা। আপনি যদি এইভাবে অনুশীলন করেন তবে আপনি কীভাবে কোডিংয়ের বিষয়ে যেতে পারেন তা আপনি সত্যিই বুঝতে পারবেন।

আপনি যদি এটি ঘন ঘন করে থাকেন তবে একটি সিআরসি সফ্টওয়্যারটিতে গণনা করতে বেশ ধীর। হার্ডওয়্যার গণনা অনেক বেশি দক্ষ এবং এর জন্য কয়েকটি গেট প্রয়োজন।


4
সিআরসি 32 বা সিআরসি
32 বি-

4
হাই, "ডেটাগুলিতে বহুভুজকে ভাগ করা" বলতে আপনি কী বোঝাতে চেয়েছেন তা কি আমি কিছুটা বিভ্রান্ত করছি? stackoverflow.com/questions/62168128/... কি দ্বারা represnted হয় বহুপদী মধ্যে X? আমি কি খণ্ড থেকে ওটার বাইট ব্যবহার করব?
নীলজাইকে

7

সিআরসি নিবন্ধগুলির উইকিপিডিয়া সাইক্লিক রিডানডেন্সি চেক এবং গণনা ছাড়াও , আমি একটি ভাল রেফারেন্স হতে বিপরীত সিআরসি - তত্ত্ব ও অনুশীলন * শিরোনামে একটি পেপার পেয়েছি ।

সিআরসি কম্পিউটিংয়ের জন্য মূলত তিনটি পন্থা রয়েছে: একটি বীজগণিতিক পদ্ধতির, একটি বিট-ওরিয়েন্টেড পদ্ধতির এবং একটি টেবিল-চালিত পদ্ধতির। ইন সিআরসি Reversing - তত্ত্ব ও অভ্যাস * পন্থা এই তিনটি আলগোরিদিম প্রতিটি / সি প্রোগ্রামিং ভাষায় CRC32 জন্য একটি বাস্তবায়ন দ্বারা পরিশিষ্ট অনুষঙ্গী তত্ত্ব ব্যাখ্যা করা হয়।

* পিডিএফ লিঙ্ক
বিপরীত সিআরসি - তত্ত্ব এবং অনুশীলন।
এইচইউ বার্লিনের পাবলিক রিপোর্ট
SAR-PR-2006-05
মে 2006
লেখক:
মার্টিন স্টিগ, হেনরিক প্লাটজ, ওল্ফ মোলার, জেনস-পিটার রেডলিচ


হাই, আপনি কিছুটা ব্যাখ্যা করতে পারেন?
নীলজাইকে

7

আমি এই প্রশ্নের উত্তর উন্মোচন করতে গিয়ে কিছুটা সময় ব্যয় করেছি এবং অবশেষে আমি আজ সিআরসি -32-তে একটি টিউটোরিয়াল প্রকাশ করেছি: সিআরসি -32 হ্যাশ টিউটোরিয়াল - অটোহটকি সম্প্রদায়

এটি থেকে এই উদাহরণে, আমি ASCII স্ট্রিং 'abc' এর জন্য সিআরসি -32 হ্যাশ গণনা করতে কিভাবে তা দেখিয়েছি:

calculate the CRC-32 hash for the ASCII string 'abc':

inputs:
dividend: binary for 'abc': 0b011000010110001001100011 = 0x616263
polynomial: 0b100000100110000010001110110110111 = 0x104C11DB7

011000010110001001100011
reverse bits in each byte:
100001100100011011000110
append 32 0 bits:
10000110010001101100011000000000000000000000000000000000
XOR the first 4 bytes with 0xFFFFFFFF:
01111001101110010011100111111111000000000000000000000000

'CRC division':
01111001101110010011100111111111000000000000000000000000
 100000100110000010001110110110111
 ---------------------------------
  111000100010010111111010010010110
  100000100110000010001110110110111
  ---------------------------------
   110000001000101011101001001000010
   100000100110000010001110110110111
   ---------------------------------
    100001011101010011001111111101010
    100000100110000010001110110110111
    ---------------------------------
         111101101000100000100101110100000
         100000100110000010001110110110111
         ---------------------------------
          111010011101000101010110000101110
          100000100110000010001110110110111
          ---------------------------------
           110101110110001110110001100110010
           100000100110000010001110110110111
           ---------------------------------
            101010100000011001111110100001010
            100000100110000010001110110110111
            ---------------------------------
              101000011001101111000001011110100
              100000100110000010001110110110111
              ---------------------------------
                100011111110110100111110100001100
                100000100110000010001110110110111
                ---------------------------------
                    110110001101101100000101110110000
                    100000100110000010001110110110111
                    ---------------------------------
                     101101010111011100010110000001110
                     100000100110000010001110110110111
                     ---------------------------------
                       110111000101111001100011011100100
                       100000100110000010001110110110111
                       ---------------------------------
                        10111100011111011101101101010011

remainder: 0b10111100011111011101101101010011 = 0xBC7DDB53
XOR the remainder with 0xFFFFFFFF:
0b01000011100000100010010010101100 = 0x438224AC
reverse bits:
0b00110101001001000100000111000010 = 0x352441C2

thus the CRC-32 hash for the ASCII string 'abc' is 0x352441C2

4
আপনি আরও গতি পেতে চাইলে ২০০ 2006-এর দিকে ইন্টেলের কিছু প্রকৌশলী একযোগে মেশিনের ডেটা বাসের প্রস্থের 4 বা 8 বাইট ব্যবহার করে একটি পদ্ধতি তৈরি করেছিলেন। একাডেমিক কাগজ: static.aminer.org/pdf/PDF/000/432/446/... SourceForge উপর প্রকল্প: sourceforge.net/projects/slicing-by-8 সাধারণ CRC পৃষ্ঠা: create.stephan-brumme.com/crc32
অ্যালান কোরি

4
হাই ধন্যবাদ আপনাকে দুর্দান্ত দেখাচ্ছে, তবে আপনি ঠিক কীভাবে বহুপদী মান পাবেন? এক্স ঠিক কি প্রতিনিধিত্ব করে? এবং যখন এটি x ^ 32 বলে, সেই এক্সটি 32 এর পাওয়ার বা বিটওয়াইস অপারেটরের ^? stackoverflow.com/questions/62168128/...
bluejayke

2

তারপরে সর্বদা রোস্টটা কোড রয়েছে, যা কয়েক ডজন কম্পিউটার ভাষায় প্রয়োগ করা crc32 দেখায়। https://rosettacode.org/wiki/CRC-32 এর অনেক ব্যাখ্যা এবং বাস্তবায়নের লিঙ্ক রয়েছে।


4
আপনি কিছুটা ব্যাখ্যা করতে পারেন? stackoverflow.com/questions/62168128/...
bluejayke

1

Crc32 হ্রাস করার জন্য আপনাকে এই অনুস্মারকটি গ্রহণ করতে হবে:

  1. প্রতিটি বাইটে বিটগুলি উল্টান
  2. 0xFF দিয়ে প্রথম চার বাইট জোর করুন (এটি 0 টির মধ্যে শীর্ষস্থানীয় ত্রুটিগুলি এড়ানোর জন্য)
  3. শেষে প্যাডিং যুক্ত করুন (এটি শেষ 4 বাইটগুলি হ্যাশটিতে অংশ নিতে হবে)
  4. অনুস্মারক গণনা করুন
  5. বিটগুলি আবার বিপরীত করুন
  6. xor ফলাফল আবার।

কোডটি হ'ল:


func CRC32 (file []byte) uint32 {
    for i , v := range(file) {
        file[i] = bits.Reverse8(v)
    }
    for i := 0; i < 4; i++ {
        file[i] ^= 0xFF
    }

    // Add padding
    file = append(file, []byte{0, 0, 0, 0}...)
    newReminder := bits.Reverse32(reminderIEEE(file))

    return newReminder ^ 0xFFFFFFFF
}

যেখানে অনুস্মারক IEEE হ'ল জিএফ (2) এর বিশুদ্ধ অনুস্মারক [এক্স]


4
আমি কিছুটা বুঝতে সমস্যা হচ্ছি? stackoverflow.com/questions/62168128/...
bluejayke

4
আরে @ ব্লুজেয়েকে, এই লাইব্রেরিটি github.com/furstenheim/sparse_crc32/blob/master/main.go পরীক্ষা করুন, এটি বিচ্ছিন্ন ফাইলগুলির জন্য crc32 প্রয়োগ করে, আপনি সেখানে গণনার উপর নিতম্বের কৌটা বিবরণ দেখতে পারেন। এটি অনুকূলিত হয় না তাই সাধারণ বাস্তবায়নগুলির চেয়ে অনুসরণ করা সহজ। এটি এমন হতে পারে যে আপনি যা বুঝতে পারছেন না তা হ'ল জিএফ (২) [x] অংশ B ^ 3 + x হল এক্স * (x ^ 2 + 1)। সুতরাং x ^ 3 + x এর ওপরে x এর অনুস্মারকটি 0 হয় তবে x ^ 2 এর চেয়ে বেশি এটি x ^ 2 * x + x হবে, যা অনুস্মারকটি হবে x।
গ্যাব্রিয়েল ফার্সটেনহিম

4
@ ব্লুজেয়েকে এবং অনুস্মারকটি আইইইই এর অর্থ একটি সুপরিচিত বহুভুজের বিরুদ্ধে স্মরণিকা, আইইইই বহুপদী
গ্যাব্রিয়েল ফারস্টেনহিম

হাই, আবার আপনার প্রতিক্রিয়া জন্য ধন্যবাদ। আমি কেবল (জাভাস্ক্রিপ্টের উদ্দেশ্যে) বোঝার চেষ্টা করছি যে "এক্স" বহুবর্ষে পুনঃসংশোধন করে। আমি এখানে অনুপস্থিত কোন কিছুর জন্য কি "x" কোনও ধরণের কোড-শব্দ রয়েছে? এখানে এমন অনেক শর্ত রয়েছে যা আমাকে এখানে বিভ্রান্ত করে, আমি এর আগে কখনও সিআরসি 32 এর কথা শুনিনি, এমনকি অনুসন্ধানের পরেও আমি এটির প্রকৃত ব্যাখ্যা খুঁজে পাইনি। একটি পিএনজি উদাহরণস্বরূপ এটি বলে যে আমার "প্রতিটি খণ্ডের জন্য সিআরসি" নেওয়া দরকার, তার অর্থ কি "খণ্ডের সমস্ত ডেটার জন্য"? তবে আমি কীভাবে বহুবর্ষে এটি "প্লাগ ইন" করব? "এক্স" কি উপস্থাপন করে? এছাড়াও যখন এটি x ^ 32 বলে, এটি ম্যাথপোওয়ের মতো (x, 32) বা বিটওয়াইস ^
নীলজয়কে

4
হাই @ ব্লুজেয়েকে, এক্স গণনাগুলি সহজ করার জন্য একটি বিমূর্ততা। এটি কোনও কিছুর দ্বারা প্রতিস্থাপিত হবে বলে আশা করা যায় না। x ^ 2 মানে x * x, একটি আনুষ্ঠানিক গুণফল। এখানে chrisballance.com/wp-content/uploads/2015/10/CRC-Primer.html আপনি এই বিভাগটির একটি সুন্দর ব্যাখ্যা পেতে পারেন। আমি আমার উত্তরের সাথে যা চেষ্টা করেছি তা হ'ল বিভাগের (সেই লিঙ্কে) এবং প্রকৃত গণনার মধ্যে ফাঁক পূরণ করা
গ্যাব্রিয়েল ফারস্টেনহাইম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.