<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>i cant think &#187; cryptography</title>
	<atom:link href="http://wan.pengganas.net/tag/cryptography/feed/" rel="self" type="application/rss+xml" />
	<link>http://wan.pengganas.net</link>
	<description>a personal blog belong to mohammad azwan bin ali. you can find his writing about his life, thoughts , linux tips &#38; tricks, programming and many more</description>
	<lastBuildDate>Fri, 23 Jul 2010 13:44:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>straddling checkerboard with ruby</title>
		<link>http://wan.pengganas.net/entry/straddling-checkerboard-with-ruby/</link>
		<comments>http://wan.pengganas.net/entry/straddling-checkerboard-with-ruby/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 11:48:29 +0000</pubDate>
		<dc:creator>azwan ali</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://wan.pengganas.net/?p=518</guid>
		<description><![CDATA[this week i sharpen my ruby saw with an excessive about straddling checkerboard encryption. In cryptography, a straddling checkerboard is a device for converting an alphabetic  plaintext  into digits whilst simultaneously achieving fractionation (a simple form of information diffusion) and homophony (a simple method for suppressing peaks of the frequency distribution). It also is known [...]]]></description>
			<content:encoded><![CDATA[<p>this week i sharpen my ruby saw with an excessive about straddling checkerboard encryption.</p>
<blockquote><p>In cryptography, a straddling checkerboard is a device for converting an alphabetic  plaintext  into digits whilst simultaneously achieving fractionation (a simple form of information diffusion) and homophony (a simple method for suppressing peaks of the frequency distribution). It also is known as a monome-dinome cipher. -- <a title="straddling checkerboard wikipedia" href="http://en.wikipedia.org/wiki/Straddling_checkerboard" target="_blank">wikipedia</a></p></blockquote>
<p>after do some reading on how the operation was, i've workout the algorithm.<br />
as i want to learn more about ruby but don't know what i can do with it, so i decided to write this in ruby<br />
<img src='http://wan.pengganas.net/smilies/melt.gif' alt='&#91;&#109;&#101;&#108;&#116;&#93;' class='wp-smiley' title='&#91;&#109;&#101;&#108;&#116;&#93;' /><img src='http://wan.pengganas.net/smilies/melt.gif' alt='&#91;&#109;&#101;&#108;&#116;&#93;' class='wp-smiley' title='&#91;&#109;&#101;&#108;&#116;&#93;' /></p>
<p>here's the solution<br />
<span id="more-518"></span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Straddling</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> initialize<span class="br0">&#40;</span> key_text, n1, n2, n3 <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;key_text = key_text+<span class="st0">&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;key_text = key_text.<span class="me1">upcase</span>.<span class="kw3">split</span><span class="br0">&#40;</span>//<span class="br0">&#41;</span>.<span class="me1">uniq</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="re1">@key_text</span> = key_text</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re1">@n1</span> = n1;@n2 = n2;@n3 = n3</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> create</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="re1">@board</span> = <span class="kw3">Array</span>.<span class="me1">new</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;k = <span class="nu0">0</span>;prev = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">for</span> a <span class="kw1">in</span> <span class="nu0">0</span>..<span class="nu0">40</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>a == <span class="re1">@n1</span> || a == <span class="re1">@n2</span> || a == <span class="re1">@n3</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="re1">@board</span><span class="br0">&#91;</span>a<span class="br0">&#93;</span> = <span class="st0">&quot;_&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span><span class="st0">&quot;A&quot;</span>..<span class="st0">&quot;J&quot;</span><span class="br0">&#41;</span> === prev</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">@board</span><span class="br0">&#91;</span>a<span class="br0">&#93;</span> = prev == <span class="st0">&quot;J&quot;</span>? <span class="nu0">0</span>:<span class="br0">&#40;</span><span class="br0">&#40;</span>prev<span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="nu0">-16</span><span class="br0">&#41;</span>.<span class="me1">chr</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">else</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">@board</span><span class="br0">&#91;</span>a<span class="br0">&#93;</span> = <span class="re1">@key_text</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span> == <span class="st0">&quot; &quot;</span> ? <span class="st0">&quot;*&quot;</span> : <span class="re1">@key_text</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k+=<span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;prev = <span class="re1">@board</span><span class="br0">&#91;</span>a<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">return</span> <span class="re1">@board</span>.<span class="me1">to_s</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> tp<span class="br0">&#40;</span>key,text<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re1">@key</span> = key.<span class="kw3">split</span><span class="br0">&#40;</span>//<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@text</span> = text.<span class="kw3">gsub</span><span class="br0">&#40;</span><span class="st0">' '</span>,<span class="st0">'*'</span><span class="br0">&#41;</span>.<span class="me1">upcase</span>.<span class="kw3">split</span><span class="br0">&#40;</span>//<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> keygen</div>
</li>
<li class="li2">
<div class="de2"><span class="re1">@keygen</span> = <span class="kw3">Array</span>.<span class="me1">new</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@checker_board</span> = <span class="re1">@board</span>.<span class="me1">to_s</span>.<span class="kw3">split</span><span class="br0">&#40;</span>//<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> a <span class="kw1">in</span> <span class="nu0">0</span>..@text.<span class="me1">length</span><span class="nu0">-1</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; found = <span class="re1">@checker_board</span>.<span class="me1">index</span><span class="br0">&#40;</span>@text<span class="br0">&#91;</span>a<span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="nu0">0</span>..<span class="nu0">9</span><span class="br0">&#41;</span> === found</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">@keygen</span>.<span class="me1">push</span><span class="br0">&#40;</span>found<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elsif</span> <span class="br0">&#40;</span><span class="nu0">10</span>..<span class="nu0">19</span><span class="br0">&#41;</span> === found</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">@keygen</span>.<span class="me1">push</span><span class="br0">&#40;</span>@n1,found%<span class="nu0">10</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elsif</span> <span class="br0">&#40;</span><span class="nu0">20</span>..<span class="nu0">29</span><span class="br0">&#41;</span> === found</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">@keygen</span>.<span class="me1">push</span><span class="br0">&#40;</span>@n2,found%<span class="nu0">10</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">@keygen</span>.<span class="me1">push</span><span class="br0">&#40;</span>@n3,found%<span class="nu0">10</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> e<span class="br0">&#40;</span>key,text<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">self</span>.<span class="me1">tp</span><span class="br0">&#40;</span>key,text<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">self</span>.<span class="me1">keygen</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">print</span> <span class="st0">&quot;#{@keygen.to_s}<span class="es0">\n</span>&quot;</span></div>
</li>
<li class="li2">
<div class="de2">t = <span class="kw3">Array</span>.<span class="me1">new</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@keygen</span>.<span class="me1">each</span> <span class="kw1">do</span> |value|</div>
</li>
<li class="li1">
<div class="de1">t.<span class="me1">push</span><span class="br0">&#40;</span><span class="br0">&#40;</span>@key<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">to_i</span>+value.<span class="me1">to_i</span><span class="br0">&#41;</span>%<span class="nu0">10</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@key</span> &lt;&lt; <span class="re1">@key</span>.<span class="me1">shift</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw3">print</span> <span class="st0">&quot;#{@t.to_s}<span class="es0">\n</span>&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">print</span> <span class="st0">&quot;Encrypt=#{self.show(t)}<span class="es0">\n</span>&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> d<span class="br0">&#40;</span>key,text<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">self</span>.<span class="me1">tp</span><span class="br0">&#40;</span>key,text<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">self</span>.<span class="me1">keygen</span></div>
</li>
<li class="li1">
<div class="de1">t = <span class="kw3">Array</span>.<span class="me1">new</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@keygen</span>.<span class="me1">each</span> <span class="kw1">do</span> |value|</div>
</li>
<li class="li1">
<div class="de1">t.<span class="me1">push</span><span class="br0">&#40;</span><span class="br0">&#40;</span>value<span class="nu0">+10</span>-<span class="br0">&#40;</span>@key<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">to_i</span><span class="br0">&#41;</span>%<span class="nu0">10</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re1">@key</span> &lt;&lt; <span class="re1">@key</span>.<span class="me1">shift</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">print</span> <span class="st0">&quot;Decrypt=#{self.show(t).gsub('*',' ')}<span class="es0">\n</span>&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">def</span> show<span class="br0">&#40;</span>t<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">a = <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">result = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> a &lt; t.<span class="me1">length</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">unless</span> t<span class="br0">&#91;</span>a<span class="br0">&#93;</span> == <span class="re1">@n1</span> || t<span class="br0">&#91;</span>a<span class="br0">&#93;</span> == <span class="re1">@n2</span> || t<span class="br0">&#91;</span>a<span class="br0">&#93;</span> == <span class="re1">@n3</span></div>
</li>
<li class="li2">
<div class="de2">result = result + <span class="re1">@checker_board</span><span class="br0">&#91;</span>t<span class="br0">&#91;</span>a<span class="br0">&#93;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">a+=<span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">result = result + <span class="re1">@checker_board</span><span class="br0">&#91;</span>t<span class="br0">&#91;</span>a<span class="nu0">+1</span><span class="br0">&#93;</span>==<span class="kw2">nil</span> ? </div>
</li>
<li class="li1">
<div class="de1">t<span class="br0">&#91;</span>a<span class="br0">&#93;</span>:<span class="br0">&#40;</span>t<span class="br0">&#91;</span>a<span class="br0">&#93;</span>==@n1 ?<span class="nu0">1</span>:<span class="br0">&#40;</span>t<span class="br0">&#91;</span>a<span class="br0">&#93;</span>==@n2<span class="br0">&#41;</span> ?<span class="nu0">2</span>:<span class="nu0">3</span><span class="br0">&#41;</span>*<span class="nu0">10</span>+t<span class="br0">&#91;</span>a<span class="nu0">+1</span><span class="br0">&#93;</span><span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2">a+=<span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">return</span> result</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">board = Straddling.<span class="me1">new</span><span class="br0">&#40;</span><span class="st0">&quot;sharpen your saw&quot;</span>,<span class="nu0">2</span>,<span class="nu0">5</span>,<span class="nu0">9</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">puts</span><span class="br0">&#40;</span>board.<span class="me1">create</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">board.<span class="me1">e</span><span class="br0">&#40;</span><span class="st0">&quot;2641&quot;</span>,<span class="st0">&quot;programming praxis&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">board.<span class="me1">d</span><span class="br0">&#40;</span><span class="st0">&quot;2641&quot;</span>,<span class="st0">&quot;S811R53S87A18RUAS8PSSH5&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">puts</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">board.<span class="me1">e</span><span class="br0">&#40;</span><span class="st0">&quot;2641&quot;</span>,<span class="st0">&quot;encrypt this text&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">board.<span class="me1">d</span><span class="br0">&#40;</span><span class="st0">&quot;2641&quot;</span>,<span class="st0">&quot;A118R1H81A8RALR8H5ALRA180_&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">puts</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">board = Straddling.<span class="me1">new</span><span class="br0">&#40;</span><span class="st0">&quot;my secret keys&quot;</span>,<span class="nu0">2</span>,<span class="nu0">5</span>,<span class="nu0">9</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">puts</span><span class="br0">&#40;</span>board.<span class="me1">create</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">board.<span class="me1">e</span><span class="br0">&#40;</span><span class="st0">&quot;241&quot;</span>,<span class="st0">&quot;ruby programming rocks&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">board.<span class="me1">d</span><span class="br0">&#40;</span><span class="st0">&quot;241&quot;</span>,<span class="st0">&quot;SF5E5*5MIREESEACY45YIS5****MESE&quot;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p><a href="http://codepad.org/YxIAE8Ch">code preview</a><br />
<strong> fix:</strong> bug where it didn't check for null value after last digit<br />
note that this code use 3 space but of course you can modify it and chose different space if you like</p>
<p><img src='http://wan.pengganas.net/smilies/jamur.gif' alt='&#91;&#106;&#97;&#109;&#117;&#114;&#93;' class='wp-smiley' title='&#91;&#106;&#97;&#109;&#117;&#114;&#93;' /></p>
]]></content:encoded>
			<wfw:commentRss>http://wan.pengganas.net/entry/straddling-checkerboard-with-ruby/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
