ক্রিপ্টোগ্রাফিক হ্যাশ গল্ফ


34

এই প্রতিযোগিতা শেষ।

চ্যালেঞ্জগুলির প্রকৃতির কারণে , যখন সংশ্লিষ্ট ডাকাতদের চ্যালেঞ্জের প্রতি আগ্রহ হ্রাস পেয়েছে তখন পুলিশ চ্যালেঞ্জ অনেক সহজ হয়ে যায়। সুতরাং, আপনি যখন এখনও হ্যাশ ফাংশন পোস্ট করতে পারেন, আপনার উত্তর গৃহীত হবে না বা লিডারবোর্ডের অংশ তৈরি করবে না।

এই চ্যালেঞ্জটি হ্যাশ ফাংশনটির সংক্ষিপ্ততম প্রয়োগের সন্ধান যা সংঘর্ষ প্রতিরোধী , অর্থাত্ একই হ্যাশ সহ দুটি পৃথক বার্তা খুঁজে পাওয়া অসম্ভব।

একজন পুলিশ হিসাবে, আপনি কোডের আকার এবং সংঘর্ষ প্রতিরোধের মধ্যে সেরা সমঝোতার সন্ধান করতে একটি হ্যাশ ফাংশন আবিষ্কার ও প্রয়োগ করার চেষ্টা করছেন। অনেকগুলি বাইট ব্যবহার করুন এবং অন্য পুলিশ আপনাকে ছাড়িয়ে যাবে!

ডাকাত হিসাবে, আপনি পুলিশদের কাজগুলি ক্র্যাক করে তাদের প্রচেষ্টা ব্যর্থ করার চেষ্টা করেছেন, প্রমাণ করে যে তারা অনুপযুক্ত। এটি তাদের অ্যালগোরিদমগুলিকে শক্তিশালী করতে আরও বাইট ব্যবহার করতে বাধ্য করবে!

পুলিশ চ্যালেঞ্জ

কার্য

একটি ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন প্রয়োগ করুন এইচ: আমি -> আপনার পছন্দের হে , যেখানে আমি 2 2 30 এর নীচে সমস্ত অ-নেতিবাচক পূর্ণ সংখ্যার সেট এবং 128 এর নীচে সমস্ত অ-নেতিবাচক পূর্ণসংখ্যার সেট ।

হয় আপনি বাস্তবায়ন করতে পারেন এইচ প্রকৃত ফাংশন যা গ্রহণ করে এবং একটি একক পূর্ণসংখ্যা, একটি পূর্ণসংখ্যা একটি স্ট্রিং উপস্থাপনা বা পূর্ণসংখ্যার একটি অ্যারের বা পূর্ণ প্রোগ্রাম যা বেস 10 বা 16 stdin এবং stdout- এ কপি করে প্রিন্ট থেকে সার্চ ফেরৎ হিসাবে।

স্কোরিং

  • এইচ যে এটি নীচে সংজ্ঞায়িত ডাকাতদের চ্যালেঞ্জকে প্রতিহত করতে হবে ।

    ডাকাত যদি পোস্ট দেওয়ার পরে প্রথম 168 ঘন্টার মধ্যে আপনার জমাটি হারায় তবে এটি ক্র্যাকড বলে বিবেচিত হবে ।

  • এইচ এর বাস্তবায়ন যতটা সম্ভব সংক্ষিপ্ত হওয়া উচিত। সংক্ষিপ্ততম আবদ্ধ না হওয়া জমা দেওয়া হবে পুলিশ চ্যালেঞ্জের বিজয়ী।

অতিরিক্ত বিধি

  • আপনি বাস্তবায়ন তাহলে এইচ একটি ফাংশন হিসাবে, একটি প্রোগ্রাম যা উপরে বর্ণিত রূপে আচরণ করবে মধ্যে থেকে ক্রিয়াকলাপ নির্বাহ করা একটি লেফাফা প্রদান করুন।

  • আপনার প্রোগ্রাম বা মোড়কের জন্য দয়া করে কমপক্ষে তিনটি পরীক্ষামূলক ভেক্টর সরবরাহ করুন (উদাহরণস্বরূপ ইনপুট এবং তাদের সম্পর্কিত আউটপুট)।

  • এইচ আপনার উপন্যাসের নকশা (পছন্দসই) বা একটি সুপরিচিত অ্যালগরিদম হতে পারে, আপনি যতক্ষণ না এটি নিজে প্রয়োগ করেন। এটি কোনও ধরণের অন্তর্নির্মিত হ্যাশ ফাংশন, সংক্ষেপণ ফাংশন, সিফার, পিআরএনজি ইত্যাদি ব্যবহার নিষিদ্ধ

    হ্যাশিং ফাংশনগুলি (যেমন, বেস রূপান্তর) বাস্তবায়নের জন্য অন্তর্নির্মিত যে কোনও বিল্ট-ইন ব্যবহার করা হয় তা ন্যায্য খেলা।

  • আপনার প্রোগ্রাম বা ফাংশনের আউটপুট অবশ্যই নির্দোষ হতে হবে।

  • একটি বিনামূল্যে (বিয়ারের মতো) সংকলক / দোভাষা থাকা উচিত যা একটি x86 বা x64 প্ল্যাটফর্মে বা ওয়েব ব্রাউজারের মধ্যে থেকে চালানো যেতে পারে।

  • তোমার প্রোগ্রাম বা ফাংশন যুক্তিসঙ্গতভাবে দক্ষ হতে হবে এবং যে কোন বার্তা হ্যাশ হয়েছে উচিত আমি নিচে 2 2 19 একটি দ্বিতীয় কম সময়ে।

    প্রান্তের ক্ষেত্রে, আমার মেশিনে নেওয়া (প্রাচীর) সময়টি (ইন্টেল কোর আই -3-707 RAM০, র্যামের ১B জিআইবি) সিদ্ধান্ত নেবে।

  • এই চ্যালেঞ্জের প্রকৃতি প্রদত্ত, আপনার উত্তরের কোডটি কোনওভাবেই পরিবর্তন করা নিষিদ্ধ, এটি আউটপুট পরিবর্তন করে কিনা।

    যদি আপনার জমাটি ক্র্যাক হয়ে গেছে (বা তা না থাকলেও), আপনি একটি অতিরিক্ত উত্তর পোস্ট করতে পারেন।

    যদি আপনার উত্তরটি অবৈধ হয় (যেমন, এটি I / O নির্দিষ্টকরণের সাথে সম্মতি দেয় না), দয়া করে এটি মুছুন।

উদাহরণ

পাইথন 2.7, 22 বাইট

def H(M):
 return M%17

লেফাফা

print H(int(input()))

ডাকাতরা চ্যালেঞ্জ জানায়

কার্য

'থেকে নিম্নলিখিত পোস্ট করে জমা পুলিশ কোন ফাটল থ্রেড ডাকাত' দুই বার্তা: এম এবং এন মধ্যে আমি যেমন যে এইচ (এম) = এইচ (এন) এবং এম ≠ এন

স্কোরিং

  • প্রতিটি কপ সাবমিশন ক্র্যাক করা আপনার এক পয়েন্ট লাভ করে। সবচেয়ে পয়েন্ট সহ ডাকাত জিতেছে।

    টাইয়ের ক্ষেত্রে, বাঁধা ডাকাত যা দীর্ঘতম জমা দেওয়ার পক্ষে জয়লাভ করে।

অতিরিক্ত বিধি

  • প্রতিটি পুলিশ জমা দেওয়ার সময় কেবল একবার ফাটানো যায়।

  • যদি কোনও পুলিশ জমা দেওয়ার বাস্তবায়ন-সংজ্ঞায়িত বা অপরিজ্ঞাত আচরণের উপর নির্ভর করে তবে আপনাকে কেবল আপনার মেশিনে (যাচাই করে) কাজ করতে পারে এমন একটি ক্র্যাক খুঁজে পেতে হবে।

  • প্রতিটি ক্র্যাক ডাকাতদের থ্রেডে পৃথক উত্তরের অন্তর্ভুক্ত।

  • একটি অবৈধ ক্র্যাকিংয়ের প্রচেষ্টা পোস্ট করা আপনাকে 30 মিনিটের জন্য নির্দিষ্ট জমাটি ক্র্যাক করা থেকে নিষিদ্ধ করে।

  • আপনি নিজের জমা জমা দিতে পারেন না।

উদাহরণ

পাইথন 2.7, 22 বাইট দ্বারা ব্যবহারকারী 8675309

1

এবং

18

লিডারবোর্ড

নিরাপদ জমা দিন

  1. সিজেম, 21 বাই বাইট ই-বিজনেস
  2. সি ++, টুকুসি দ্বারা 148 বাইট
  3. সি ++, 233 (?) বাইট বাই দ্বারা

আনক্র্যাকড জমাগুলি

আপনি এখনও ক্র্যাক না হওয়া উত্তরগুলির একটি তালিকা পেতে এই স্ট্যাক স্নিপেট ব্যবহার করতে পারেন।

function g(p){$.getJSON('//api.stackexchange.com/2.2/questions/51068/answers?page='+p+'&pagesize=100&order=desc&sort=creation&site=codegolf&filter=!.Fjs-H6J36w0DtV5A_ZMzR7bRqt1e',function(s){s.items.map(function(a){var h=$('<div/>').html(a.body).children().first().text();if(!/cracked/i.test(h)&&(typeof a.comments=='undefined'||a.comments.filter(function(b){var c=$('<div/>').html(b.body);return /^cracked/i.test(c.text())||c.find('a').filter(function(){return /cracked/i.test($(this).text())}).length>0}).length==0)){var m=/^\s*((?:[^,(\s]|\s+[^-,(\s])+)\s*(?:[,(]|\s-).*?([0-9]+)/.exec(h);$('<tr/>').append($('<td/>').append($('<a/>').text(m?m[1]:h).attr('href',a.link)),$('<td class="score"/>').text(m?m[2]:'?'),$('<td/>').append($('<a/>').text(a.owner.display_name).attr('href',a.owner.link))).appendTo('#listcontent');}});if(s.length==100)g(p+1);});}g(1);
table th, table td {padding: 5px} th {text-align: left} .score {text-align: right} table a {display:block}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><table><tr><th>Language</th><th class="score">Length</th><th>User</th></tr><tbody id="listcontent"></tbody></table>


যদি কোনও হ্যাশ ফাংশন ভুলক্রমে 2 ^ 128-1 এর চেয়ে বেশি সংখ্যার নম্বর দেয়, তবে তা কি জমাটিকে অবৈধ করে দেয়, বা আমরা কেবল ফলাফলটি মডেলো 2 8 128 নেব?
মার্টিন ইন্ডার

@ মার্টিনবাটনার: হ্যাঁ, আপনাকে ফলাফলটি 2 ^ 128 নিতে হবে।
ডেনিস

1
@ সিমনস্টার প্রয়োজনীয়তা পূরণ করে না (2 ^ 30 বিট পর্যন্ত ইনপুট, 128 বিট আউটপুট)
কোডসইনচাউস

1
পুলিশ এবং ডাকাতরা সাধারণত অন্যভাবে যায় না?
হানিফমুবারক

2
সম্ভবত আমাদের একটি নিয়ম থাকতে পারে যে সাবমিশনগুলিতে উদাহরণ হ্যাশগুলি অন্তর্ভুক্ত থাকতে হবে, এটি প্রয়োগকারীদের সাথে ক্র্যাকিংয়ের সাথে তুলনা করার ফলস্বরূপ ফলাফল জমা দেওয়ার জন্য সাবমিটারগুলিকে বেছে নেওয়া প্রোগ্রামিং ভাষা চালানো বেশ বিরক্তিকর।
aaaaaaaaaaaa

উত্তর:


6

সিজেম, 21 বাইট

1q3*{i+_E_#*^26_#)%}/

ইনপুট হিসাবে বাইটগুলির একটি স্ট্রিং নেয়।

সিউডোকোডে:

hash = 1
3 times:
    for i in input:
        hash = hash + i
        hash = hash xor hash * 14^14
        hash = hash mod (26^26 + 1)
output hash

উদাহরণ হ্যাশ:

"" (খালি স্ট্রিং) -> 1
"পরীক্ষা" -> 2607833638733409808360080023081587841
"পরীক্ষা" -> 363640467424586895504738713637444713

এটি সরল দিকে কিছুটা হতে পারে, আউটপুট পরিসরটি 122 বিটের চেয়ে কিছুটা বেশি, ট্রিপল পুনরাবৃত্তি শক্তিশালীকরণ এটি প্রতিবার একই জিনিস হিসাবে ইতিমধ্যে কিছুটা ভেঙে গেছে, তাই ইনপুট যা প্রথমটিতে 1 এ হ্যাশ করে পুনরাবৃত্তি একটি সম্পূর্ণ বিরতি হবে। তবে এটি সংক্ষিপ্ত, এবং খুব নিরাপদ থাকার কোনও মজা নেই।


অন্যান্য সিজেএম পোস্টের মতো কি এর সাথে সংযুক্ত সি সংস্করণ রয়েছে?
vi।

@Vi। না, এখনও কমপক্ষে না। আমি কখনই সি-তে বিগিন্ট নিয়ে ডাবলড করিনি, এর জন্য কোনও স্ট্যান্ডার্ড লাইব্রেরি নেই?
aaaaaaaaaaaa



1
@ আগওয়া 1001 আপনি আপনার পরিভাষাটি মিশ্রিত করছেন। এটি একটি ট্রিপল-পাস স্পঞ্জ ফাংশন হ্যাশ অ্যালগরিদম। সিজার সাইফার হ'ল একটি নির্দিষ্ট এনক্রিপশন অ্যালগরিদম যার অভ্যন্তরীণ অবস্থা নেই।
aaaaaaaaaaaa

7

পাইথন, 109 বাইট [ কর্কশ , এবং আবার ]

def f(n,h=42,m=2**128):
 while n:h+=n&~-m;n>>=128;h+=h<<10;h^=h>>6;h%=m
 h+=h<<3;h^=h>>11;h+=h<<15;return h%m

আমি জেনকিন্সের 'এক-সময়ে-সময়ে-সময়ে' তেমন কার্যকারিতা বাস্তবায়নের চেষ্টা করেছি , কেবলমাত্র পার্থক্য বীজ এবং বিট সংখ্যা।

মজাদার ঘটনা: স্পষ্টতই পার্ল কোনও সময় জেনকিন্সের হ্যাশ ব্যবহার করেছিলেন

লেফাফা

print(f(int(input())))

উদাহরণ

>>> f(0)
12386682
>>> f(1)
13184902071
>>> f(2**128-1)
132946164914354994014709093274101144634
>>> f(2**128)
13002544814292
>>> f(2**128+1)
13337372262951
>>> f(2**(2**20))
290510273231835581372700072767153076167



6

সি ++, 148 বাইট

typedef __uint128_t U;U h(char*b,U n,U&o){U a=0x243f6a8885a308d,p=0x100000001b3;for(o=a;n--;)for(U i=27;--i;){o=(o<<i)|(o>>(128-i));o*=p;o^=b[n];}}

__uint128_t একটি জিসিসি এক্সটেনশন, এবং প্রত্যাশার মতো কাজ করে। হ্যাশটি পুনরুক্তি করা এফএনভি হ্যাশের উপর ভিত্তি করে তৈরি করা হয়েছে (আমি তাদের প্রাইম ধার নিয়েছি, যদিও হেক্সেa পাই এর প্রথম সংখ্যা) প্রতিটি পুনরাবৃত্তির শুরুতে শ -1-জাতীয় ঘূর্ণন সহ। এর সাথে সংকলন করা -O3, একটি 10 ​​এমবি ফাইল হ্যাশ করতে 2 সেকেন্ডেরও বেশি সময় লাগে, সুতরাং অভ্যন্তরীণ লুপে পুনরাবৃত্তিগুলি আরও বেড়ে যাওয়ার জন্য এখনও মার্জিন রয়েছে - তবে আমি আজ উদার বোধ করছি।

আপনার ক্র্যাকিংয়ের আনন্দের জন্য ডি-অগ্লিফাইড (পরিবর্তিত পরিবর্তনশীল নাম, যুক্ত মন্তব্য, সাদা স্থান এবং ধনুর্বন্ধনী একজোড়া):

typedef __uint128_t U;
U h(char* input, U inputLength, U &output){
    U a=0x243f6a8885a308d,p=0x100000001b3;    
    for(output=a;inputLength--;) {   // initialize output, consume input
        for(U i=27;--i;) {                          // evil inner loop
            output = (output<<i)|(output>>(128-i)); // variable roll 
            output *= p;                            // FNV hash steps
            output ^= input[inputLength];        
        }
    }
    // computed hash now available in output
}

গল্ফিং পরামর্শগুলি স্বাগত (যদিও আমি তাদের উপর ভিত্তি করে কোডটি উন্নত না করি)।

সম্পাদনা: ডি-অগ্লিফাইড কোডে স্থির টাইপগুলি (গল্ফ সংস্করণ অপরিবর্তিত রয়েছে)।


oঅবিচ্ছিন্ন বলে মনে হচ্ছে। কোথায় outputঘোষিত হয়? অথবা হয়ত oহয় output?
vi।

একই জন্য n। আপনি কি চালানোর জন্য "ডি-অগ্লিফাইড" কোডটি সত্যই পরীক্ষা করেছেন?
vi।

ব্রুটফোসার শুরু করেছে ...
vi।

এমনকি 3-রাউন্ড সংস্করণও সহজ নয়।
vi।

@Vi। স্থির ডি-অগ্লিফাইড সংস্করণ - এটি আরও ভাল করে পরীক্ষা না করায় দুঃখিত। আমি inner ভিতরের লুপ নিয়ে গর্বিত; U i=81;i-=3উল্লেখযোগ্য রানটাইম ব্যয় ব্যতীত আরও বেশি জঘন্য হতে পারে।
টুকুশি

5

সিজেম, ৪৪ বাইট [ ক্র্যাক ]

lW%600/_z]{JfbDbGK#%GC#[md\]}%z~Bb4G#%\+GC#b

ইনপুটটি বেস 10 এ রয়েছে।

সিজেম ধীর গতিতে। আমি আশা করি এটি কোনও কম্পিউটারে 1 সেকেন্ডে চলবে ...

ব্যাখ্যা

lW%600/            e# Reverse, and split into chunks with size 600.
_z                 e# Duplicate and swap the two dimensions.
]{                 e# For both versions or the array:
    JfbDb          e# Sum of S[i][j]*13^i*19^j, where S is the character values,
                   e# and the indices are from right to left, starting at 0.
    GK#%GC#[md\]   e# Get the last 32+48 bits.
}%
z~                 e# Say the results are A, B, C, D, where A and C are 32 bits.
Bb4G#%             e# E = the last 32 bits of A * 11 + C.
\+GC#b             e# Output E, B, D concatenated in binary.

ঠিক আছে, দ্বিমাত্রিক জিনিসগুলি একটি দুর্বলতা বলে মনে হয়েছিল ... এটি শুরুতে কিছু ধীর গণনা দ্রুত করার উদ্দেশ্যে করা হয়েছিল। তবে আমি যাই করুক না কেন এটি এক সেকেন্ডে চলতে পারে না, তাই আমি অবশেষে ধীর কোডটি সরিয়েছি।

আমি যদি বাইনারি বিট এবং উচ্চতর বেসগুলি ব্যবহার করি তবে এটি আরও ভাল হওয়া উচিত।

সি সংস্করণ

__uint128_t hash(unsigned char* s){
    __uint128_t a=0,b=0;
    __uint128_t ar=0;
    __uint128_t v[600];
    int l=0,j=strlen(s);
    memset(v,0,sizeof v);
    for(int i=0;i<j;i++){
        if(i%600)
            ar*=19;
        else{
            a=(a+ar)*13;
            ar=0;
        }
        if(i%600>l)
            l=i%600;
        v[i%600]=v[i%600]*19+s[j-i-1];
        ar+=s[j-i-1];
    }
    for(int i=0;i<=l;i++)
        b=b*13+v[i];
    a+=ar;
    return (((a>>48)*11+(b>>48))<<96)
        +((a&0xffffffffffffull)<<48)
        +(b&0xffffffffffffull);
}

আপনি একটি বিবরণ যোগ করতে পারেন? সবাই সিজেমকে চেনে না।
orlp

@orlp সম্পাদিত ...
জিমি 23013

এটি আমার কম্পিউটারে 0.4 সে সময় নেয়, সুতরাং এটি অনুমোদিত ব্যাপ্তির মধ্যে ভাল well
ডেনিস

এ, বি, সি ইত্যাদি কী? কিছু ম্যাট্রিক? কোন মাত্রা? এটি সহজে সি তে প্রয়োগ করা যেতে পারে?
vi।

1
ক্র্যাকড , আমি বিশ্বাস করি
Sp3000

5

সি ++, 182 টি অক্ষর (বয়লারপ্লেটের প্রায় 51 টি অক্ষর)

h=0xC0CC3051F486B191;j=0x9A318B5A176B8125;char q=0;for(int i=0;i<l;++i){char w=buf[i];h+=((w<<27)*257);j^=(h+0x5233);h+=0xAA02129953CC12C3*(j>>32);j^=(w+0x134)*(q-0x16C552F34);q=w;}

boilerplate:

void hash(const unsigned char* buf, size_t len, unsigned long long *hash1, unsigned long long *hash2)
{
    unsigned long long &h=*hash1;
    unsigned long long &j=*hash2;
    size_t l = len;
    const unsigned char* b = buf;

    // code here
}

একটি গল্ফ ফাংশন সহ চলমান প্রোগ্রাম

#include <stdio.h>

// The next line is 227 characters long
int hash(char*b,int l,long long&h,long long&j){h=0xC0CC3051F486B191;j=0x9A318B5A176B8125;char q=0;for(int i=0;i<l;++i){char w=b[i];h+=((w<<27)*257);j^=(h+0x5233);h+=0xAA02129953CC12C3*(j>>32);j^=(w+0x134)*(q-0x16C552F34);q=w;}}

int main() {
    char buf[1024];
    int l  = fread(buf, 1, 1024, stdin);
    long long q, w;
    hash(buf, l, q, w);
    printf("%016llX%016llX\n", q, w);
}

2
আমি মনে করি ফাংশন ঘোষণাপত্র ইত্যাদি চরিত্রের গণনার পক্ষে গণনা করা হয়।
Ypnypn

@Ypnypn, একটি গল্ফড ডাউন ফাংশন ঘোষণার মধ্যে গণিত অক্ষর।
vi।

আউটপুট হ্যাশ কি? আমি ধরে নিচ্ছি এটি ((এইচ << 64) | জে)।
টুকুশি

হ্যাঁ। অথবা 64৪-বিট সংখ্যার একটি জুড়ি। আমি এটি __uint128_tপ্রয়োগ করার পরেই জানতে পারি ।
vi।

1
@ ডেনিস, সম্পন্ন.󠀠
vi।

4

পাইথ, 8 ক্র্যাকড

sv_`.lhQ

এটি অনলাইনে চেষ্টা করুন

কিছুটা নির্বোধ উত্তর, আমি এটি কীভাবে কাজ করে তা ব্যাখ্যা করব কারণ বেশিরভাগ লোক পাইথ পড়তে পারে না। এটি এক প্লাস ইনপুটটির প্রাকৃতিক লগ নেয় এবং তারপরে এটিকে স্ট্রিতে রূপান্তর করে। সেই স্ট্রিংটি বিপরীত হয় এবং তারপরে মূল্যায়ন করা হয় এবং তারপরে একটি পূর্ণসংখ্যায় রূপান্তরিত হয়।

একটি অজগর অনুবাদটি দেখতে পাবেন:

import math
n = eval(input()) + 1
rev = str(math.log(n))[::-1]
print(int(eval(rev)))


4

পাইথন 3, 216 বাইট [ ক্র্যাক ]

def f(m):
 h=1;p=[2]+[n for n in range(2,102)if 2**n%n==2];l=len(bin(m))-2;*b,=map(int,bin((l<<(l+25)//26*26)+m)[2:])
 while b:
  h*=h
  for P in p:
   if b:h=h*P**b.pop()%0xb6ee45a9012d1718f626305a971e6a21
 return h

অনুমানের সাথে বেমানান হওয়ার কারণে আমি কমপক্ষে একটি হালকা ভাবতে পারি দুর্বলতার কথা ভাবতে পারি তবে অন্যটি আমি মনে করি এটি কমপক্ষে প্রাণবন্ত প্রমাণ। আমি অন্যান্য জিনিসের মধ্যে প্রথম 10 মিলিয়ন হ্যাশ পরীক্ষা করেছি।

গল্ফের দিক থেকে এটি পাইথন ২-এ ছোট হবে, তবে আমি দক্ষতার জন্য কিছু বাইট ত্যাগ করেছি (যেহেতু এটি সম্ভবত কোনওভাবেই জিততে পারে না)।

সম্পাদনা করুন: খুব স্মুথ হ্যাশ বাস্তবায়নের জন্য এটি আমার চেষ্টা ছিল , তবে দুর্ভাগ্যক্রমে 128-বিট খুব ছোট ছিল।

লেফাফা

print(f(int(input())))

উদাহরণ

>>> f(0)
2
>>> f(123456789)
228513724611896947508835241717884330242
>>> f(2**(2**19)-1)
186113086034861070379984115740337348649
>>> f(2**(2**19))
1336078

কোড ব্যাখ্যা

def f(m):
 h=1                                             # Start hash at 1
 p=[2]+[n for n in range(2,102)if 2**n%n==2]     # p = primes from 2 to 101
 l=len(bin(m))-2                                 # l = bit-length of m (input)
 *b,=map(int,bin((l<<(l+25)//26*26)+m)[2:])      # Convert bits to list, padding to
                                                 # a multiple of 26 then adding the
                                                 # bit-length at the front

 while b:                                        # For each round
  h*=h                                           # Square the hash
  for P in p:                                    # For each prime in 2 ... 101
   if b:h=(h*P**b.pop()                          # Multiply by prime^bit, popping
                                                 # the bit from the back of the list
           %0xb6ee45a9012d1718f626305a971e6a21)  # Take mod large number

 return h                                        # Return hash

প্যাডিংয়ের উদাহরণ f(6):

[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]

(len 3)(------------------ 23 zeroes for padding -------------------------)(input 6)
       (---------------------------- length 26 total ------------------------------)


4

সি, 87 বাইট [ ক্র্যাকড ]

এটি সম্পূর্ণ প্রোগ্রাম; কোন মোড়কের দরকার নেই। স্টিডিনের মাধ্যমে বাইনারি ইনপুট গ্রহণ করে এবং স্টেক্সআউটে একটি হেক্সাডেসিমাল হ্যাশ আউটপুট দেয়।

c;p;q;main(){while((c=getchar())+1)p=p*'foo+'+q+c,q=q*'bar/'+p;printf("%08x%08x",p,q);}

এটি কেবল একটি 64-বিট হ্যাশ গণনা করে, তাই আমি এখানে কিছুটা জুয়া নিচ্ছি taking

কারও অবাক হওয়ার ক্ষেত্রে, দুটি ধ্রুবক 'foo+'এবং 'bar/'1717578987 এবং 1650553391 মূল সংখ্যা।


উদাহরণ:

শীর্ষস্থানীয় জিরো উপেক্ষা করুন:

echo -ne '\x00\x00\x00\x00' |./hash
0000000000000000

একক বাইট ইনপুট:

echo -ne '\x01' |./hash
0000000100000001
echo -ne '\xff' |./hash
000000ff000000ff

মাল্টি-বাইট ইনপুট:

echo -ne '\x01\x01' |./hash
666f6f2dc8d0e15c
echo -ne 'Hello, World' |./hash
04f1a7412b17b86c

এটি 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' এবং 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' নিয়ে কতটা আচরণ করবে?
ইসমাইল মিগুয়েল

1
foo|(d5c9bef71d4f5d1b) এবং foo\(d5c9bef71d4f5d1b) খুব অনুরূপ হ্যাশ তৈরি করে।
ইসমাইল মিগুয়েল

1
এটি ভেঙে!!! \x00এবং \x00\x00!
ইসমাইল মিগুয়েল

1
চ্যাটের মন্তব্যের ভিত্তিতে, আমি বিশ্বাস করি এটি এখনও ফাটল না? কেবলমাত্র ডাবল চেকিং, কারণ আপলোড করা মন্তব্যটি তাদের মধ্যে বিভ্রান্তিকর হতে পারে যারা অনার্যাকড হ্যাশগুলির জন্য স্কিমিং করছে।
Sp3000


3

জে - 39 বাইট - ক্র্যাকড

ইনপুট হিসাবে একটি স্ট্রিং নেওয়া এবং একটি পূর্ণসংখ্যা ফেরত ফাংশন <2 128 । আমি ধরে নিচ্ছি যে আমাদের ফাংশনটি বৈধ হওয়ার জন্য আমাদের নামকরণ করতে হবে, সুতরাং আমরা বেনামে ফাংশন জমা দিতে পারি যদি গণনা থেকে আরও 3 টি অক্ষর বাদ দিন।

H=:_8(".p:@+5,9:)a\(a=.(2^128x)&|@^/@)]

আপনারা যারা হায়ারোগ্লিফিক্স পড়েন না তাদের জন্য, আমি কী করছি তার একটি রুনডাউন এখানে।

  • a=.(2^128x)&|@^/@এটি একটি সাবরুটাইন * যা সংখ্যার অ্যারে নেয় এবং তারপরে এটি একটি পাওয়ার টাওয়ার হিসাবে গণ্য হয়, যেখানে ক্ষুদ্রাকর্ষণটি 128 মডে নেওয়া হয় । "পাওয়ার টাওয়ার" দ্বারা, মানে আপনি যদি ইনপুটটি দিয়ে থাকেন তবে3 4 5 6 গণনা করবে 3 ^ (4 ^ (5 ^ 6))
  • (".p:@+5,9:)aএই ফাংশনটি একটি স্ট্রিং নেয়, এটিকে N সংখ্যাতে রূপান্তর করে এবং তারপরে ( n +5) -th এবং ( n +9) -th মূখ্য সংখ্যা গণনা করে এবং তারপরে aআগে থেকে নিক্ষেপ করে । অর্থাৎ আমরা খুঁজে p(n+5) ^ p(n+9)গেলিক ভাষার 2 128 যেখানে p(k)হয়k -th প্রধানমন্ত্রী।
  • H=:_8...\(a...)]ইনপুটটির 8-চরিত্রের সাবব্লকগুলিতে উপরের ফাংশনটি সম্পাদন করুন এবং তারপরে aসমস্ত ফলাফল এক সাথে করুন এবং ফলাফলের হ্যাশ ফাংশনটি কল করুন H। আমি 8 টি অক্ষর ব্যবহার করি কারণ জে এর "তৃতীয় kপ্রাইম" ফাংশন ব্যর্থ হয় যখন p(k)<2 31 , অর্থাৎ k=105097564বৃহত্তম নিরাপদ থাকে k

কিছু নমুনা আউটপুট আছে। আপনি নিজেরাই অনলাইনে চেষ্টা করে দেখতে পারেন tryj.tk এ , তবে আমি জাসফটওয়্যার থেকে অনুবাদক ডাউনলোড করে বাড়িতেই এটি করার পরামর্শ দিচ্ছি

   H=:_8(".p:@+5,9:)a\(a=.(2^128x)&|@^/@)]
   H '88'
278718804776827770823441490977679256075
   H '0'
201538126434611150798503956371773
   H '1'
139288917338851014461418017489467720433
   H '2'
286827977638262502014244740270529967555
   H '3'
295470173585320512295453937212042446551
   30$'0123456789'  NB. a 30 character string
012345678901234567890123456789
   H 30$'0123456789'
75387099856019963684383893584499026337
   H 80$'0123456789'
268423413606061336240992836334135810465

* প্রযুক্তিগতভাবে, এটি নিজের মধ্যে এবং এটি কোনও ফাংশন নয়, এটি অন্যান্য ফাংশনগুলিতে সংযুক্ত থাকে এবং তাদের আউটপুটটিতে কাজ করে acts তবে এটি জেটির একটি শব্দার্থক ইস্যু, ধারণাগত পার্থক্য নয়: প্রোগ্রামের প্রবাহটি আমি উপরে বর্ণিত হিসাবে এটি।



2

পাইথন 3, 118 বাইট [ ক্র্যাক ]

def H(I):
    o=0;n=3;M=1<<128
    for c in I:i=ord(c);o=(o<<i^o^i^n^0x9bb90058bcf52d3276a7bf07bcb279b7)%M;n=n*n%M
    return o

ইন্ডেন্টেশন একটি একক ট্যাব। সাধারণ হ্যাশ, এটি এখনও পুরোপুরি পরীক্ষা করে নি।

নীচে কল করুন:

print(H("123456789"))

ফলাফল: 73117705077050518159191803746489514685


কীভাবে ইনপুট পূর্ণসংখ্যাকে আপনার অ্যালগরিদমে ব্যবহার করতে স্ট্রিংয়ে রূপান্তর করা উচিত?
ফেয়ারস

@ ফেয়ারসাম বেস -10 স্ট্রিংটি আমি যা পরীক্ষা করেছি। এটা তোলে কিছু ব্যবহার না কিন্তু ord(c)(ক 0-9 স্ট্রিং সঙ্গে nul অক্ষর ভালো জিনিস ছাড়া, আমি ঐ করতে হ্যাশ দুর্ঘটনায় মনে সত্যিই সহজ তাই লাঠি।।) যদিও, তাই সত্যিই, কোন স্ট্রিং কি করতে হবে :)
tomsmeding

1
এটি ভেঙে গেছে: কোডগল্ফ.স্ট্যাকেক্সেঞ্জাওএ / a / 51160 / 41288 । "10000" এবং "20000" এর মতো স্ট্রিংগুলি খুব কাছের হ্যাশগুলি উত্পাদন করে তা পর্যবেক্ষণ করে শুরু হয়েছিল। আরও বেশি সংখ্যক শূন্যের সাথে খেলা শুরু হয়েছিল এবং 128 বা তার পরে, কোনও অঙ্ক + কে * 4 জিরো পুনরাবৃত্তি করে কে কে নির্বিশেষে একই হ্যাশ ফেরত দেয়।
টুকুশি

@ টুকুসি ইতিমধ্যে ভেবেছিল এটি খুব শক্ত মৌমাছি করা উচিত নয় ; খুশি যে এটি তুচ্ছ ছিল না কিন্তু যে কেউ যে কোনওভাবে এটি ভেঙে দিয়েছে। ভাল কাজ.
টমসডিং

2

সি ++, 239 বাইট

আমার খুব প্রথম কোড গল্ফ! [ দয়া করে সৌম্য হন ]

#define r(a,b) ((a<<b)|(a>>(64-b)))
typedef uint64_t I;I f(I*q, I n, I&h){h=0;for(I i=n;--i;)h=r(h^(r(q[i]*0x87c37b91114253d5,31)*0x4cf5ad432745937f),31)*5+0x52dce729;h^=(h>>33)*0xff51afd7ed558ccd;h^=(h>>33)*0xc4ceb9fe1a85ec53;h^=(h>>33);}

অবরুদ্ধ সংস্করণ:

I f(I* q, I n, I& h) // input, length and output
{
    h = 0; // initialize hashes
    for (I i=n;--i;)
    {
        q[i] *= 0x87c37b91114253d5;
        q[i]  = rotl(q[i], 31);
        q[i] *= 0x4cf5ad432745937f;

        h ^= q[i]; // merge the block with hash

        h *= rotl(h, 31);
        h = h * 5 + 0x52dce729;
    }
    h ^= h>>33;
    h *= 0xff51afd7ed558ccd;
    h ^= h>>33;
    h *= 0xc4ceb9fe1a85ec53; // avalanche!
    h ^= h>>33;
}

সেরা হ্যাশ নয় এবং অবশ্যই অস্তিত্বের সংক্ষিপ্ততম কোড নয়। গল্ফিং টিপস গ্রহণ করা এবং উন্নতির আশা করছি!

লেফাফা

সম্ভবত বিশ্বের সেরা নয়, তবে একটি র‍্যাপার তবুও

I input[500];

int main()
{
    string s;
    getline(cin, s);
    memcpy(input, s.c_str(), s.length());
    I output;
    f(input, 500, output);
    cout << hex << output << endl;
}

2
শক্ত দেখাচ্ছে, তবে but৪ বিটের সাহায্যে এটি জোর-জবরদস্তির বিষয় হতে পারে। Total স্কয়ার্ট (এন) পরীক্ষায় (এন মোট আউটপুটগুলির মধ্যে থেকে) একটি সংঘর্ষ খুঁজে পাওয়ার প্রায় 50% সুযোগ রয়েছে; 2 ^ 32 চেষ্টা আধুনিক পিসির জন্য তেমন কিছু নয়।
টুকুশি

মোড়কের শিরোনামে অন্তর্ভুক্তি নেই এবং সাধারণভাবে অনেকগুলি সমান হ্যাশ হয়।
vi।

কিছু হ্যাশের নমুনা সরবরাহ করুন। আমার জন্য "3" এবং "33" উভয়ই 481c27f26cba06cf (এই মোড়ক ব্যবহার করে) এ নিয়ে যায়।
vi।

ফাটল: কোডগল্ফ.স্ট্যাকেক্সেঞ্জাওএ / a / 51215 / 41288 । আমি @ ভিআই এর ঠিক আগে সন্দেহ করি। কেন এত হ্যাশ সমান ছিল তা খুঁজে পেয়েছি।
টুকুশি

1
যথাযথ সংঘর্ষ (বাগ ব্যবহার না করে): printf '33333333\x40\xF3\x32\xD6\x56\x91\xCA\x66' | ./hash7_-> a4baea17243177fd; printf '33333333\x77\x39\xF3\x82\x93\xDE\xA7\x2F' | ./hash7_-> a4baea17243177fd। ব্রুটফোসার এখানে অন্যান্য 64-বিট হ্যাশের তুলনায় এখানে খুব দ্রুত সংঘর্ষের সন্ধান করে।
vi।

2

জাভা, 299 291 282 বাইট, ক্র্যাক।

import java.math.*;class H{public static void main(String[]a){BigInteger i=new java.util.Scanner(System.in).nextBigInteger();System.out.print(BigInteger.valueOf(i.bitCount()*i.bitLength()+1).add(i.mod(BigInteger.valueOf(Long.MAX_VALUE))).modPow(i,BigInteger.valueOf(2).pow(128)));}}

বিগইন্টিজারে কিছু অপারেশন করে, তারপরে ফলাফলটি মডেলো 2 128 নেয় ।


আমি কীভাবে এটি চালাব? আইডিয়ন এটি সংকলন করতে অস্বীকার করেছে।
মার্টিন ইন্ডার

1
ক্লাসটির নাম পরিবর্তন করে "মেইন" বা প্রথম "পাবলিক" কীওয়ার্ড মুছে ফেলে (তবে দ্বিতীয়টি নয়) আপনি এটিকে আইডিয়নে চালাতে পারেন। হয় একজন কাজ করবে।
সুপারজেডি ২২৪


1
@ সুপারজেডি ২২৪ টি publicনিজের প্রথম বার করে remove টি চর সংরক্ষণ করছেন?
ব্যবহারকারী 253751

@ এমমিবিস কারণ তখন আমি মনে করি না এটি ঠিক গ্রহণে কাজ করবে। আমি চেষ্টা করব যদিও। সম্পাদনা: আমার ধারণা এটি হয়েছে does এটি একটি আশ্চর্যজনক।
সুপারজেডি ২২৪

2

সি, 128 বাইট [ ক্র্যাক ]

p;q;r;s;main(c){while((c=getchar())+1)p=p*'foo+'+s^c,q=q*'bar/'+p,r=r*'qux3'^q,s=s*'zipO'+p;printf("%08x%08x%08x%08x",p,q,r,s);}

এটি আমার শেষ প্রয়াসের মতোই কমবেশি একই অ্যালগরিদম (ভি দ্বারা ক্র্যাক হয়েছে) , তবে এখন যথাযথ 128-বিট হ্যাশ তৈরির জন্য যথেষ্ট হ্যামস্টার চাকা রয়েছে।

কোডের চারটি প্রধান ধ্রুবক নিম্নরূপ:

'foo+' = 1718578987
'bar/' = 1650553391
'qux3' = 1903523891
'zipO' = 2053730383

আগের মতো, এটি একটি সম্পূর্ণ প্রোগ্রাম যা কোনও মোড়কের দরকার নেই। আমি পূর্ণসংখ্যাটি স্টিডিনের মাধ্যমে কাঁচা বাইনারি ডেটা (বিগ-এন্ডিয়ান) হিসাবে ইনপুট করি এবং হ্যাশ ও হে -তে স্টাডাউটে মুদ্রিত হয়। শীর্ষস্থানীয় জিরো আই উপেক্ষা করা হয়।

উদাহরণ:

echo -ne '\x00' |./hash
00000000000000000000000000000000
echo -ne '\x00\x00' |./hash
00000000000000000000000000000000
echo -ne '\x01' |./hash
00000001000000010000000100000001
echo -ne 'A' |./hash
00000041000000410000004100000041
echo -ne '\x01\x01' |./hash
666f6f2dc8d0e15cb9a5996fe0d8df7c
echo -ne 'Hello, World' |./hash
da0ba2857116440a9bee5bb70d58cd6a


আপনার উদাহরণটি ঠিক সেখানে (প্রথম দুটি) সংঘর্ষ দেখায়নি?
mbomb007

@ mbomb007 নং। ইনপুটটি 0 এবং 2 ^ (2 ^ 30) এর মধ্যে একটি সংখ্যা। 0x00 এবং 0x0000 উভয়ই শূন্যের সমান, তাই তারা একই আউটপুট উত্পাদন করে।
স্কুয়ামিশ ওসিফরেজ

2

সি, 122 বাইট [ ক্র্যাক ]

long long x,y,p;main(c){for(c=9;c|p%97;c=getchar()+1)for(++p;c--;)x=x*'[3QQ'+p,y^=x^=y^=c*x;printf("%016llx%016llx",x,y);}

নেস্টেড লুপস, অর্ধ-assed এলসিজি এবং ভেরিয়েবল অদলবদল। কি ভালবাসা না?

এর সাথে চারপাশে খেলতে খেলতে এখানে একটি ভারী সংস্করণ রয়েছে:

long long x,y,p;

int main(int c){
    // Start with a small number of iterations to
    //   get the state hashes good and mixed because initializing takes space
    // Then, until we reach the end of input (EOF+1 == 0)
    //   and a position that's a multiple of 97
    for (c=9;c|p%97;c=getchar()+1) {

        // For each input c(haracter) ASCII value, iterate down to zero
        for (++p;c--;) {

            // x will act like a LCG with a prime multiple
            //   partially affected by the current input position
            // The string '[3QQ' is the prime number 0x5B335151
            x=x*'[3QQ'+p;

            // Mix the result of x with the decrementing character
            y^=c*x;

            // Swap the x and y buffers
            y^=x^=y;
        }
    }

    // Full 128-bit output
    printf("%016llx%016llx",x,y);
    return 0;
}

এটি সম্পূর্ণরূপে স্ব-অন্তর্ভুক্ত প্রোগ্রাম যা এসটিডিআইএন থেকে এসটিডিআউট প্রিন্ট করে।

উদাহরণ:

> echo -n "Hello world" | ./golfhash
b3faef341f70c5ad6eed4c33e1b55ca7

> echo -n "" | ./golfhash
69c761806803f70154a7f816eb3835fb

> echo -n "a" | ./golfhash
5f0e7e5303cfcc5ecb644cddc90547ed

> echo -n "c" | ./golfhash
e64e173ed4415f7dae81aae0137c47e5

কিছু সাধারণ মাপদণ্ডে এটি প্রায় 3MB / s পাঠ্য ডেটার হ্যাশ করে। হ্যাশ গতি ইনপুট ডেটা নিজেই উপর নির্ভর করে, তাই সম্ভবত এটি বিবেচনা করা উচিত।



1

পিএইচপি 4.1, 66 বাইট [ ক্র্যাক ]

আমি শুধু গরম আপ করছি।

আমি আশা করি আপনি এই insteresting খুঁজে পাবেন।

<?for($l=strlen($b.=$a*1);$i<40;$o.=+$b[+$i]^"$a"/$a,$i++);echo$o;

আমি এটি 999999999999999999999999999999 এর চেয়ে বড় সংখ্যায় চেষ্টা করেছি।
আউটপুটটি 2 128 এর মধ্যে রয়েছে বলে মনে হচ্ছে ।


পিএইচপি 4.1 কারণ প্রয়োজন register_globalsনির্দেশনার ।

এটি সেশন, পোষ্ট, জিইটি, অনুরোধ এবং কুকিজ থেকে স্বয়ংক্রিয়ভাবে স্থানীয় ভেরিয়েবল তৈরি করে কাজ করে।

এটি কী ব্যবহার করে a। (EG: অ্যাক্সেস ওভারhttp://localhost/file.php?a=<number> )।

আপনি যদি পিএইচপি ৪.২ এবং আরও নতুন দিয়ে এটি পরীক্ষা করতে চান তবে এটি ব্যবহার করে দেখুন:

<?for($l=strlen($b.=$a=$_REQUEST['a']*1);$i<40;$o.=+$b[+$i]^"$a"/$a,$i++);echo$o;

এই সংস্করণটি কেবলমাত্র POST এবং GET এর সাথে কাজ করে।


উদাহরণ আউটপুট:

0 -> 0000000000000000000000000000000000000000
9 -> 8111111111111111111111111111111111111111
9999 -> 8888111111111111111111111111111111111111
1234567890 -> 0325476981111111111111111111111111111111
99999999999999999999999999999999999999999999999999999999999999999999999999999999 -> 0111191111111111111111111111111111111111

(আমি আপনাকে আশ্বাস দিচ্ছি যে এমন একটি সংখ্যা রয়েছে যা একই হ্যাশ তৈরি করে)



1

সি, 134 বাইট, ক্র্যাকড

এটি সম্পূর্ণ সি প্রোগ্রাম।

long long i=0,a=0,e=1,v,r;main(){for(;i++<323228500;r=(e?(scanf("%c",&v),e=v>'/'&&v<':',v):(a=(a+1)*7)*(7+r)));printf("0x%llx\n", r);}

এটি কী করে: দৈর্ঘ্যটি প্রায় 2 2 30 (কিছুটা আরও) সমান করার জন্য শেষে বাইট অ্যারে হিসাবে ইনপুট নেওয়া এবং সিউডো র্যান্ডম (তবে ডিটারিস্টেমনিক) বাইট যুক্ত করা হবে The প্রয়োগটি বাইট বাই ইনপুট বাইট পড়ে এবং সিউডো এলোমেলো ডেটা ব্যবহার শুরু করে যখন এটি প্রথম নয় এমন একটি অক্ষর খুঁজে পায় যা কোনও অঙ্ক নয়।

যেমন বিল্টিন পিআরএনজি অনুমোদিত নয় আমি নিজে এটি প্রয়োগ করেছিলাম।

অপরিবর্তিত / বাস্তবায়ন সংজ্ঞায়িত আচরণ রয়েছে যা কোডকে ছোট করে তোলে (চূড়ান্ত মানটি স্বাক্ষরিত হওয়া উচিত, এবং আমার বিভিন্ন মানের জন্য বিভিন্ন ধরণের ব্যবহার করা উচিত)। এবং আমি সি-তে 128 বিট মানগুলি ব্যবহার করতে পারি না: কম অপ্রকাশিত সংস্করণ:

long long i = 0, prand = 0, notEndOfInput = 1, in, hash;

main() {
    for (; i++ < 323228500;) {
        if (notEndOfInput) {
            scanf("%c", &in);
            notEndOfInput = in >= '0' && in <= '9';
            hash = in;
        } else {
            prand = (prand + 1)*7;
            hash = prand*(7 + hash);
        }
    }
    printf("0x%llx\n", hash);
}


1

পাইথন ২. এক্স - ১৩৯ বাইট [[ ক্র্যাকড ]]

এটি অন্যান্য সমস্ত (LOOP, XOR, SHIFT, ADD) হ্যাশগুলির সাথে একেবারেই মিল। আসুন আপনার পয়েন্ট ডাকাতদের নিয়ে আসুন;) এর সমাধান হওয়ার পরে আমি আরও শক্ত করব।

M=2**128
def H(I):
 A=[1337,8917,14491,71917];O=M-I%M
 for z in range(73):
  O^=A[z%4]**(9+I%9);O>>=3;O+=9+I**(A[z%4]%A[O%4]);O%=M
 return O

মোড়ক (বেস -16 এ একটি যুক্তি আশা করে যা হেক্সাডেসিমাল নামে পরিচিত):

import sys
if __name__ == '__main__':
 print hex(H(long(sys.argv[1], 16)))[2:][:-1].upper()


1
এছাড়াও, আমি নিশ্চিত নই যে এই এন্ট্রিটি ওপি'র স্পিকারটি পূরণ করে, যেহেতু আমার মেশিনে ফাংশনটি বড় ইনপুটগুলিতে একাধিক সেকেন্ড সময় নেয়। উদাহরণস্বরূপ, H(2**(2**10))প্রায় 8 বা 9 সেকেন্ড সময় H(2**(2**12))নিয়েছে , যখন প্রায় 29 সেকেন্ড সময় নিয়েছে এবং H(2**(2**14))দুই মিনিটের বেশি সময় নিয়েছে।
ম্যাথমন্ডন

আপনি একেবারে সঠিক, আমার অবশ্যই বড় ইনপুট জন্য সময় পরীক্ষা করা উচিত ছিল। এছাড়াও, আমি শিফট যুক্ত হওয়ার পরে আমার নিজের পরীক্ষা চালাতে ভুলে গিয়েছি বলে মনে হয়। মূল সংস্করণটি শিফট ছাড়াই ছিল (পোস্ট করার আগে) এবং এটি আমার "প্রথম 100000 পূর্ণসংখ্যার কোনও সংঘর্ষ" পরীক্ষায় উত্তীর্ণ হচ্ছিল: /
বিস্মিত

1

পাইথন 2.7 - 161 বাইট [[ ক্র্যাকড ]]

ঠিক আছে যেহেতু আমি আমার প্রথম হ্যাশ ফাংশনটি পোস্ট করার আগে একটি অকেজো সংস্করণে পরিবর্তন করতে পেরেছি বলে আমি মনে করি আমি অনুরূপ কাঠামোর অন্য একটি সংস্করণ পোস্ট করব। এবার আমি এটি তুচ্ছ সংঘর্ষের বিরুদ্ধে পরীক্ষা করেছি এবং আমি গতির জন্য বেশিরভাগ সম্ভাব্য ইনপুট প্রশস্ততা পরীক্ষা করেছি।

A=2**128;B=[3,5,7,11,13,17,19]
def H(i):
 o=i/A
 for r in range(9+B[i%7]):
  v=B[i%7];i=(i+o)/2;o=o>>v|o<<128-v;o+=(9+o%6)**B[r%6];o^=i%(B[r%6]*v);o%=A
 return o

মোড়ক (বাইটোক্যানে গণনা করা হয়নি)

import sys
if __name__ == '__main__':
 arg = long(sys.argv[1].strip(), 16)
 print hex(H(arg))[2:][:-1].upper()

চালনার উদাহরণ (ইনপুট সর্বদা একটি হেক্সাডেসিমাল সংখ্যা):

$ python crypt2.py 1
3984F42BC8371703DB8614A78581A167
$ python crypt2.py 10
589F1156882C1EA197597C9BF95B9D78
$ python crypt2.py 100
335920C70837FAF2905657F85CBC6FEA
$ python crypt2.py 1000
B2686CA7CAD9FC323ABF9BD695E8B013
$ python crypt2.py 1000AAAA
8B8959B3DB0906CE440CD44CC62B52DB


জিমি খুব ভাল করেছে :)
23-22

1

রুবি, 90 বাইট

def H(s);i=823542;s.each_byte{|x|i=(i*(x+1)+s.length).to_s.reverse.to_i%(2**128)};i;end

একটি অত্যন্ত র্যান্ডম হ্যাশ অ্যালগরিদম আমি কোনও বাস্তব হ্যাশ না দেখে তৈরি করেছিলাম ... এটি ভাল কিনা ধারণা নেই। এটি ইনপুট হিসাবে একটি স্ট্রিং লাগে।

আবরণ:

def buildString(i)
  if(i>255)
    buildString(i/256)+(i%256).chr
  else
    i.chr
  end
end 
puts H buildString gets

আপনি দয়া করে প্রশ্নটি আবশ্যক মোড়ক সরবরাহ করতে পারেন?
ডেনিস

ইনপুট ফর্ম্যাটটি কী? আমি একটি নম্বর দিয়ে চেষ্টা করেছি কিন্তু এটি বলে comparison of String with 255 failed (ArgumentError)
জিমি 23013

এইচ একটি স্ট্রিং নেয়, বিল্ড স্ট্রিং অপের জন্য প্রয়োজনীয় নম্বরটি নেয় এবং এটিকে স্ট্রিংয়ে রূপান্তর করে।
মেগাটম

আমার মনে হয় আপনার gets.to_iর‌্যাপারে একটি দরকার ।
জিমি 23013


0

ম্যাথমেটিকা, 89 বাইট, ফাটল

Last@CellularAutomaton[(a=Mod)[#^2,256],{#~IntegerDigits~2,0},{#~a~99,128}]~FromDigits~2&

সবচেয়ে কম নয়।


3
ম্যাথমেটিকা ​​ছাড়া আপনি কীভাবে এটি চালাবেন? "একটি বিনামূল্যে (বিয়ারের মতো) সংকলক / দোভাষী থাকতে হবে যা একটি x86 বা x64 প্ল্যাটফর্মে বা ওয়েব ব্রাউজারের মধ্যে থেকে চালানো যেতে পারে" "
মার্টিন এন্ডার



0

পিএইচপি, By৯ বাইট (একটি মন্তব্য সহ ক্র্যাকড):

echo (('.'.str_replace('.',M_E*$i,$i/pi()))*substr(pi(),2,$i%20))+deg2rad($i);

এটি পিএইচপি-তে টাইপ-রূপান্তরগুলির মাধ্যমে প্রচুর ভীতিজনক বিষয়গুলি করে, যা পূর্বাভাস দেওয়া শক্ত করে;) (বা কমপক্ষে আমি এটি আশা করি)। এটি অবশ্য স্বল্পতম বা সবচেয়ে অপঠনযোগ্য উত্তর নয়।

এটি চালাতে আপনি পিএইচপি 4 ব্যবহার করতে পারেন এবং গ্লোবালগুলি নিবন্ধিত করতে পারেন (? I = 123 দিয়ে) বা কমান্ডলাইনটি ব্যবহার করতে পারেন :

php -r "$i = 123.45; echo (('.'.str_replace('.',M_E*$i,$i/pi()))*substr(pi(),2,$i%20))+deg2rad($i);"

5
হ্যাশের আউটপুট মানটি ভাসমান-পয়েন্ট দেখাচ্ছে। এবং এটি 3000000000000000000000000000000000000000000000011 এবং 3000000000000000000000000000000000000000000000000 এর জন্য একই

0

সি # - 393 বাইট ফাটল

using System;class P{static void Main(string[]a){int l=a[0].Length;l=l%8==0?l/8:l/8+1;var b=new byte[l][];for(int i=0;i<l;i++){b[i]=new byte[8];};int j=l-1,k=7;for(int i=0;i<a[0].Length;i++){b[j][k]=Convert.ToByte(""+a[0][i],16);k--;if((i+1)%8==0){j--;k=7;}}var c=0xcbf29ce484222325;for(int i=0;i<l;i++){for(int o=0;o<8;o++){c^=b[i][o];c*=0x100000001b3;}}Console.WriteLine(c.ToString("X"));}}

Ungolfed:

using System;
class P
{
    static void Main(string[]a)
    {
      int l = a[0].Length;
      l = l % 8 == 0 ? l / 8 : l / 8 + 1;
      var b = new byte[l][];
      for (int i = 0; i < l; i++) { b[i] = new byte[8]; };
      int j = l-1, k = 7;
      for (int i = 0; i < a[0].Length; i++)
      {
        b[j][k] = Convert.ToByte(""+a[0][i], 16);
        k--;
        if((i+1) % 8 == 0)
        {
          j--;
          k = 7;
        }
      }
      var c = 0xcbf29ce484222325;
      for (int i = 0; i < l; i++)
      {
        for (int o = 0; o < 8; o++)
        {
          c ^= b[i][o];
          c *= 0x100000001b3;
        }
      }
      Console.WriteLine(c.ToString("X"));
    }
}

আমি জীবনে কখনও ক্রিপ্টোগ্রাফি বা হ্যাশিং স্পর্শ করি নি, তাই বিনীত করুন :)

এটি একটি FNV-1a এর সাধারণ বাস্তবায়ন কিছু অ্যারে পাইভোটিং সহ । আমি নিশ্চিত যে এটি করার আরও ভাল উপায় আছে তবে আমি এটি করতে পারি এটি সেরা।

এটি দীর্ঘ ইনপুটগুলিতে কিছুটা মেমরি ব্যবহার করতে পারে।


ক্র্যাকড: কোডগল্ফ.সটাকেক্সচেঞ্জ / এ / 12১২77/10/১০১ ত্রুটিযুক্ত প্যাডিংয়ের শীর্ষে, এটি কোনও ক্রিপ্টোগ্রাফিক হ্যাশ নয়, এটি ভাঙ্গার অনেক উপায় রয়েছে।
aaaaaaaaaaaa

0

পাইথন 2, 115 বাইট [ ইতিমধ্যে ক্র্যাকড!]

ঠিক আছে, এখানে আমার শেষ প্রচেষ্টা। চূড়ান্ত নিউলাইন প্রয়োজন হয় না শুধুমাত্র 115 বাইট।

h,m,s=1,0,raw_input()
for c in[9+int(s[x:x+197])for x in range(0,len(s),197)]:h+=pow(c,257,99**99+52)
print h%4**64

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

এটি একটি মডুলার এক্সপেনসেন্টেশনের মাধ্যমে ইনপুট নম্বরটির 197-অঙ্কের অংশগুলি স্টাফ করে কাজ করে। কিছু ভাষার মতো নয়, int()ফাংশনটি সর্বদা বেস 10 এ ডিফল্ট থাকে, তাই int('077')77 77 হয়, 63 63 নয়।

নমুনা আউটপুট:

$ python hash.py <<<"0"
340076608891873865874583117084537586383

$ python hash.py <<<"1"
113151740989667135385395820806955292270

$ python hash.py <<<"2"
306634563913148482696255393435459032089

$ python hash.py <<<"42"
321865481646913829448911631298776772679

$ time python hash.py <<<`python <<<"print 2**(2**19)"`
233526113491758434358093601138224122227

real    0m0.890s   <-- (Close, but fast enough)
user    0m0.860s
sys     0m0.027s

1
এটি ব্লকের ক্রম ব্যবহার করে নি ... ক্র্যাক হয়েছে
jimmy23013

বিতৃষ্ণা। আমি
এইটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.