ডিসিফার একটি ভিজেনের সিফেরেক্সট


28

Vigenere সাইফার একটি সহজ polyalphabetic সাইফার মূলত বিভিন্ন সিজার সাইফারগুলির এক আবেদন করেছিলেন, একটি কী অনুযায়ী ছিল না। মূলত কীটিতে থাকা অক্ষরগুলি নির্দেশ করে যা বর্ণমালা ব্যবহারে স্থানান্তরিত হয়েছে shifted সে লক্ষ্যে একটি সাধারণ সরঞ্জাম ছিল, যাকে ভিগেনের স্কোয়ার বলা হয় :

এখানে চিত্র বর্ণনা লিখুন

এখানে প্রতিটি সারি পৃথক বর্ণমালা, কীটির সংশ্লিষ্ট বর্ণটি দিয়ে শুরু করে। এরপরে কলামগুলি সিফার্ড বর্ণটি নির্ধারণ করতে ব্যবহৃত হয়। ডিক্রিপশনটি একই ফ্যাশনে কাজ করে, কেবল তদ্বিপরীত।

মনে করুন আমরা স্ট্রিংটি এনক্রিপ্ট করতে চাই CODEGOLF। আমাদেরও একটি চাবি দরকার। এই ক্ষেত্রে কী হবে FOOBAR। কীটি যখন সরল পাঠের চেয়ে ছোট হয় আমরা পুনরাবৃত্তি দ্বারা এটি প্রসারিত করি, তাই আসল কীটি আমরা ব্যবহার করি FOOBARFO। আমরা এখন কীটির প্রথম অক্ষর সন্ধান করব, যা Fবর্ণমালা খুঁজে পাওয়া। এটি শুরু হয়, সম্ভবত আশ্চর্যজনকভাবে, দিয়ে F। এখন আমরা প্লেইনেক্সটেক্সের প্রথম বর্ণ সহ কলামটি পাই এবং ফলস্বরূপ বর্ণটি H। দ্বিতীয় চিঠির জন্য আমাদের Oকী চিঠি এবং সরল পাঠ্য অক্ষর রয়েছে যার ফলস্বরূপ C। আমরা অবশেষে যে পথে অবিরত HCRFGFQT

কার্য

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

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

ভিগেনের স্কয়ারটি নির্মাণ এখনও অনেক একই এবং সাইফার এখনও একইভাবে কাজ করে। এটি কিছুটা ... পুরোপুরি এখানে দেওয়া অনর্থক।

ইনপুট

পাঠ্যটির দুটি পৃথক লাইন হিসাবে স্ট্যান্ডার্ড ইনপুটটিতে ইনপুট দেওয়া হয়, প্রতিটি লাইন ব্রেক দ্বারা শেষ হয়। প্রথম লাইনে কী রয়েছে এবং দ্বিতীয়টিতে সিফারটেক্সট রয়েছে।

আউটপুট

একটি একক লাইন, ডিক্রিফার্ড বার্তা সহ।

জয়ের শর্ত

যেহেতু এনক্রিপশনটিকে কখনও কখনও অস্ত্র হিসাবে বিবেচনা করা হয়, তাই সহজে চোরাচালানের সুবিধার্থে কোডটি সংক্ষিপ্ত হওয়া উচিত। খাটো তত ভাল, কারণ এটি আবিষ্কারের সম্ভাবনা হ্রাস করে।

নমুনা ইনপুট 1

Key
miQ2eEO

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

Message

নমুনা ইনপুট 2

ThisIsAKey
CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu

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

ThisWorksEquallyWellWithNumbers123894576

এক সপ্তাহ কেটে গেল। বর্তমানে সংক্ষিপ্ততম সমাধানটি গৃহীত হয়েছে। আগ্রহীদের জন্য, আমাদের প্রতিযোগিতায় আমাদের নিম্নোক্ত জমা এবং দৈর্ঘ্য ছিল:

130 - পাইথন
146 - হাস্কেল
195 - সি
197 - সি
267 - ভিবি.এনইটি

এবং আমাদের নিজস্ব সমাধান যা অন্যদের সাথে স্থান পায়নি:

108 - রুবি
139 - পাওয়ারশেল


মনে হচ্ছে যে এই Vigenere বর্গ প্রিন্ট করতে উপযোগী হতে পারে।
এরিক আউটগল্ফার

উত্তর:


10

গল্ফস্ক্রিপ্ট - 48 টি অক্ষর

n%~.,@*\{\(123,97>91,65>+58,48>+:|?@|?\-|=}%\0<+

এই কোন কৌশল নেই!


+1 ভাবতে ভাবতে আমি বিছানায় গিয়েছিলাম যে এটি অবশ্যই ~ 50 এ নেমে যাওয়ার একটি উপায় থাকতে হবে, এখন আমি দেখতে পাচ্ছি এটি সম্ভব তবে আমি সম্ভবত এটি কোনও সময়েই পরিচালনা করতে
পারিনি

8

এমএস-ডস 16 বিট .কম ফাইল - 87 বাইট

বেস 64 এনকোডেড বাইনারি ( ডিকোডারের জন্য এই লিঙ্কটি অনুসরণ করে )

v1cBi8/oQACJ/ovv6DkAi9msitAqF3MDgMI+gMJhgPp6dguA6jqA+lp2A4DqK80hO/d0IkM563TW69YsYXMIBCB9AgQrBBqqtAHNITwNdev+xLIKzSHD

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

@ জোয়ী: কি, আপনি কখনই এনকোডেড মেশিন কোডের নির্দেশনা দিয়েছিলেন না! আজকাল তারা যুবকদের কী শেখায়! ;-)
স্কিজে

স্কিজ: আমি করেছি। বেস 64 এ নয়, যদিও;) (কয়েক বছর আগে আমাদের একটি ক্লাস ছিল যেখানে এসেম্বলারের ক্ষেত্রে আমাদের সিমেন্স 80C167 এর জন্য প্রোগ্রাম লিখতে হয়েছিল - এবং পরীক্ষাগুলিতেও সেগুলি মেশিন কোডে জড়ো করেছিলাম I মূল কাজ, কিন্তু আমাদের কোনও আউটপুট সুবিধা ছিল না [অন্তত, তারা বৈচিত্রপূর্ণ])।
জো

@ জোয়াই: বেস 64 এই সাইটের অন্যান্য ব্যবহারকারীর জন্য কেবল একটি সুবিধা, এটি বাইনারি ফাইল হিসাবে ডিকোড করা এবং সংরক্ষণ করা সহজ (উত্তরের লিঙ্কটিতে সেই বিকল্প রয়েছে)।
স্কিজ

আঃ, দুঃখিত আমি ভেবেছিলাম আপনি বেস 64 এর দৈর্ঘ্যটি দিয়েছেন। ঠিক আছে, ক্রিস একবার স্বেচ্ছাসেবী চরিত্রগুলিকে একটি সমাধানে অন্তর্ভুক্ত করেছিল এবং তার উত্তর ছাড়াও একটি হেক্সডাম্প দিয়েছে। আবহাওয়ার পূর্বাভাসেও আমি একই কাজ করেছি।
জো

8

এপিএল (45)

∆[⍙⍳⍨¨⌽∘∆¨(⍴⍙←⍞)⍴1-⍨⍞⍳⍨∆←⎕D,⍨⎕A,⍨⎕UCS 96+⍳26]

ব্যাখ্যা:

  • ∆←⎕D,⍨⎕A,⍨⎕UCS 96+⍳26: বর্ণমালা তৈরি করুন (সংখ্যা ( ⎕D) অক্ষর অনুসরণ করুন ( ⎕A) ছোট হাতের অক্ষর অনুসরণ করুন ( ⎕UCS 96+⍳26, ইউনিকোডের মান 97 থেকে 122)।

  • 1-⍨⍞⍳⍨∆: একটি লাইন পড়ুন (কী), বর্ণমালায় প্রতিটি অক্ষরের অবস্থান সন্ধান করুন এবং একটিকে বিয়োগ করুন (ডিফলি অনুসারে অ্যারেগুলি এক-ভিত্তিক হয়, সুতরাং সেই মানগুলি দ্বারা সরাসরি স্থানান্তর করা বর্ণমালাকে আরও অনেকদূর বদলে দেবে)।

  • (⍴⍙←⍞)⍴: অন্য লাইনটি (বার্তা) পড়ুন এবং কীটির সূচকগুলি পুনরাবৃত্তি করুন যাতে বার্তার দৈর্ঘ্য থাকে।
  • ⌽∘∆¨: মূল অনুসারে সূচকগুলি দ্বারা বর্ণমালা ঘোরান
  • ⍙⍳⍨¨: সংশ্লিষ্ট স্থানান্তরিত বর্ণমালায় বার্তায় প্রতিটি অক্ষর সন্ধান করুন
  • ∆[... ]: স্বাভাবিক বর্ণমালায় প্রদত্ত সূচকগুলি সন্ধান করুন, সংশ্লিষ্ট বর্ণগুলি প্রদান করুন।

6

রুবি - 132 127 122 109 100 টি অক্ষর

a,b=*$<
c=*?a..?z,*?A..?Z,*?0..?9
(b.size-1).times{|i|$><<c[c.index(b[i])-c.index(a[i%(a.size-1)])]}

*$<পরিবর্তে ব্যবহার করুন $<.to_aএবং আরও কয়েকটি বাইট সংরক্ষণ করতে ল্যাম্বডাকে ইনলাইন করুন। - ভেন্টোরো 5 মিনিট আগে
জোয়

ধন্যবাদ @ জোয়, আমি অক্ষরগুলি বাঁচাতে সেই ল্যাম্বডাকে টেনে এনেছি এবং কোনওরকমভাবে মিস করেছি যে এটির জন্য আরও বেশি ব্যয়।
নিমো 157

5

পাইথন - 122 টি অক্ষর

from string import*
L=letters+digits
R=raw_input
K,T=R(),R()
F=L.find
print"".join(L[F(i)-F(j)]for i,j in zip(T,K*len(T)))

5

জে, 65 টি অক্ষর

v=:4 : 'a{~x(62|[:-/"1 a i.[,.#@[$])y[a=.a.{~62{.;97 65 48+/i.26'

ইনপুট নেওয়ার পরিবর্তে এটি একটি ক্রিয়া হিসাবে সংজ্ঞায়িত হওয়ার পরে পুরোপুরি অনুপস্থিতির সাথে মিলিত হয় না, তবে পরবর্তী সময়ে এটির সাথে ফিডিংয়ের অভিপ্রায় নিয়ে যাইহোক পোস্ট দিচ্ছি।

ব্যবহার:

   'miQ2eEO' v 'Key'
Message
   'CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu' v 'ThisIsAKey'
ThisWorksEquallyWellWithNumbers123894576

4

পার্ল, 95 টি অক্ষর

পার্ল 5.010, এর সাথে চালান perl -E:

%a=map{$_,$n++}@a=(a..z,A..Z,0..9);@k=<>=~/./g;
$_=<>;s/./$a[($a{$&}-$a{$k[$i++%@k]})%62]/ge;say

3

পাইথন - 144 143 140 136 125 টি অক্ষর

সম্ভবত সেরা না, কিন্তু হেই:

from string import*
l=letters+digits
r=l.find
q=raw_input
k=q()
print"".join(l[(r(j)-r(k[i%len(k)]))%62]for i,j in enumerate(q()))

হু, আমি ঠিক এরকম কিছু পোস্ট করতে চলেছিলাম। আপনি একটি ভেরিয়েবল, 3 বা তত অক্ষরে কাঁচা ইনপুট নির্ধারণ করতে পারেন।
জুয়ান

3

গল্ফস্ক্রিপ্ট - 65 টি অক্ষর

এখনও আরও গল্ফ করা প্রয়োজন। আপাতত টি হ'ল পাঠ্য, কে হ'ল কী, এল হ'ল অক্ষরের তালিকা

n%):T,\~*:K;''26,{97+}%+.{32^}%10,{48+}%++:L;T{L\?K(L\?\:K;-L\=}%

3

কে, 81 61

k:0:0;,/$(m!+(`$'m)!+{(1_x),1#x}\m:,/.Q`a`A`n)[(#v)#k]?'v:0:0

k)k:0:0;,/$(m!+(`$'m)!+{(1_x),1#x}\m:,/.Q`a`A`n)[(#v)#k]?'v:0:0
ThisIsAKey
CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu
"ThisWorksEquallyWellWithNumbers123894576"

2

পার্ল, ১১৫ টি চর

$a=join'',@A=(a..z,A..Z,0..9);$_=<>;chop;@K=split//;$_=<>;s/./$A[(index($a,$&)-index($a,$K[$-[0]%@K]))%@A]/ge;print

2

গল্ফস্ক্রিপ্ট - 92 টি অক্ষর

n%~\.,:l;{0\{1$+\)\}%\;}:&;26'a'*&26'A'*&+10'0'*&+\@.,,{.l%3$=4$?\2$=4$?\- 62%3$\>1<}%\;\;\;

সম্ভবত এটির প্রয়োজনের তুলনায় অনেক দীর্ঘ। তবুও জিএসকে ঘিরে আমার মাথা নেওয়ার চেষ্টা করছি

Heres "অসম্পূর্ণ" এবং মন্তব্য সংস্করণ

n%~\.,:l;
{0\{1$+\)\}%\;}:&; # This would be sortof an equivalent for range applied to strings
26'a'*&26'A'*&+10'0'*&+\@., # This mess generates the dictionary string,
# l = len(key)
# 0 dictionary (letters + digits)
# 1 key
# 2 text
{
    # 3 index
    .   #+1 Duplicate the index

    # Find the index of the key letter
    l%  #+1 Indice modulo key
    3$  #+2 Duplicate the key
    =   #+1 Get the key letter
    4$? #+1 Search the letters index

    # Find the index of the text letter
    \   #+1 Get the index
    2$  #+2 Get the text
    =   #+1 Get the text letter
    4$? #+0 Search the letters index

    # 3 key index
    # 4 letter index

    \-   #+1 get the index of the new letter

    62% #+1 wrap the index around the dictionary

    3$ #+2 Get the dictionary

    \> #+1 remove the first part of the dict around the target letter

    1< #+1 remove everythin after 
}%
\;
\;
\;

2

ভিবিএ, 288

তালিকাভুক্ত VB.NET স্কোরকে পুরোপুরি পরাজিত করে না (তবে আমি কাছে আসছি):

Sub h(k,s)
v=Chr(0)
Z=Split(StrConv("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",64),v)
a=Split(StrConv(s,64),v):b=Split(StrConv(k,64),v)
For l=0 To Len(s)-1
j=l Mod Len(k)
g=0
For i=0 To 62:g=g+i*((Z(i)=b(j))-(Z(i)=a(l))):Next
x=x &Z(IIf(g<0,g+62,g))
Next
s=x
End Sub

ব্যবহার:

Sub test()
k = "ThisIsAKey"
s = "CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu"
h k, s
MsgBox s
End Sub

টিপটির জন্য জোয়াকে ধন্যবাদ !


g=g+IIf(Z(i)=c,i,0)-IIf(Z(i)=d,i,0)আমি স্পট করতে পারেন একজন প্রার্থী হবে। পাশাপাশি এলএফ লাইনের শেষগুলি ভিবিএ দ্বারা বোঝা যাচ্ছে কিনা তা চেষ্টা করার পাশাপাশি। x=x & Z(g)আমার ধারণা, কমপক্ষে একটি জায়গাও খুব সহজেই ছেড়ে দেওয়া যেতে পারে।
জোয়

লাইনটি লেখার আর একটি উপায়: g=g+i*((Z(i)=d)-(Z(i)=c)) (কারণ Trueভিবিতে −1)। এটি কাজ করে যে হতে পারে।
জো

প্রতিক্রিয়াটির জন্য ধন্যবাদ, জয়া আমি অন্য কোনও উন্নতি সন্ধান করব এবং এটিকে যুক্ত করব
গাফি

2

সি, 186

কিছুটা দেরি হলেও .. (অনুভূমিক স্ক্রোলবার এড়াতে লাইনগুলি ভাঙ্গা)।

char a[99],*s,*t;k,j;main(int m,char**v)
{for(;j<26;++j)a[j]=32|(a[j+26]=65+j),
a[52+j]=48+j;while(*v[2])
putchar(a[s=strchr(a,v[1][k++%strlen(v[1])])
,t=strchr(a,*v[2]++),s>t?t-s+62:t-s]);}

অখণ্ড লাইন

char a[99],*s,*t;k,j;main(int m,char**v){for(;j<26;++j)a[j]=32|(a[j+26]=65+j),a[52+j]=48+j;while(*v[2])putchar(a[s=strchr(a,v[1][k++%strlen(v[1])]),t=strchr(a,*v[2]++),s>t?t-s+62:t-s]);}

এই কোডটি গল্ফ করার প্রক্রিয়া সম্পর্কে একটি আলোচনা এখানে পাওয়া যাবে: http://prob-slv.blogspot.com/2013/04/code-golf.html


2

জাভাস্ক্রিপ্ট 248

var v= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
function d(k,c){var a,b,o,x
a=k.charAt(0)
x=v.indexOf(a)
b=v.substr(x)+v.substring(0,x)
o= v.charAt(b.indexOf(c.charAt(0)))
k=k.substr(1)+a
c=c.substr(1)
return (c)?o+d(k,c):o}

1

হাস্কেল (169)

import List
main=do c<-y;t<-y;putStrLn$map((k!!).(`mod`62))$zipWith(-)(g t)(cycle$g c)
k=['a'..'z']++['A'..'Z']++['0'..'9']
y=getLine
f(Just x)=x
g=map$f.(`elemIndex`k)

1

জে: 91 টি অক্ষর

[:{&{.&t({&t"0&(({.t=.1|.^:(i.62)a.{~(97+i.26),(65+i.26),48+i.10)&i.)"0@:$~#)|:@(i."1.,"0)]

উদাহরণ স্বরূপ:

    g=:[:{&{.&t({&t"0&(({.t=.1|.^:(i.62)a.{~(97+i.26),(65+i.26),48+i.10)&i.)"0@:$~#)|:@(i."1.,"0)]
    'ThisIsAKey' g 'CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu'
ThisWorksEquallyWellWithNumbers123894576
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.