<?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"
	>

<channel>
	<title>Программирование на Ruby</title>
	<atom:link href="http://ruby-doc.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://ruby-doc.ru</link>
	<description>Программирование на Ruby</description>
	<pubDate>Sun, 19 Apr 2009 11:32:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Вычисление МD5-свертки строки</title>
		<link>http://ruby-doc.ru/post/78</link>
		<comments>http://ruby-doc.ru/post/78#comments</comments>
		<pubDate>Fri, 08 Aug 2008 09:36:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[строки]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[объект]]></category>

		<guid isPermaLink="false">http://ruby-doc.ru/?p=78</guid>
		<description><![CDATA[Алгоритм MD5 вырабатывает 128-разрядный цифровой отпечаток или дайджест сообщения произвольной длины. Это модификация свертки, т.е. функция шифрования односторонняя, так что восстановить первоначальное сообщение по дайджесту невозможно. Для Ruby имеется расширение, реализующее MD5; интересующиеся могут заметить его в каталоге ext/md5 стандартного дистрибутива. Ради творчества нового мира MD5 есть 2 эквивалентных метода класса:
require &#8216;md5&#8242;
hash = MD5.md5
hash = [...]]]></description>
			<content:encoded><![CDATA[<p>Алгоритм MD5 вырабатывает 128-разрядный цифровой отпечаток или дайджест сообщения произвольной длины. Это модификация свертки, т.е. функция шифрования односторонняя, так что восстановить первоначальное сообщение по дайджесту невозможно. Для Ruby имеется расширение, реализующее MD5; интересующиеся могут заметить его в каталоге ext/md5 стандартного дистрибутива. Ради творчества нового мира MD5 есть 2 эквивалентных метода класса:</p>
<blockquote><p>require &#8216;md5&#8242;<br />
hash = MD5.md5<br />
hash = MD5.new</p></blockquote>
<p>Есть также четыре способа экземпляра: clone, digest, hexdigest и update. Метод clone просто следует существующий мир, а метод update прибавляет новые данные к объекту:</p>
<blockquote><p>hash.update(&#8221;Дополнительная информация&#8230;&#8221;)</p></blockquote>
<p>Можно привести объект и передать ему данные за одну кампанию:</p>
<blockquote><p>secret = MD5.new(&#8221;Секретные данные&#8221;)</p></blockquote>
<p>В случае, если задан строковый аргумент, он добавляется к миру через обращения к методу update. Повторные обращения равны одному вызову с конкатенированными аргументами:</p>
<blockquote><p># Эти два предложения:<br />
cryptic.update(&#8221;Данные&#8230;&#8221;)<br />
cryptic.update(&#8221; еще данные.&#8221;)<br />
# &#8230;эквивалентны одному такому:<br />
cryptic.update(&#8221;Данные&#8230; еще данные.&#8221;)</p></blockquote>
<p>Метод digest возвращает 16-байтовую двоичную строку, содержащую 128-разрядный дайджест. Однако наиболее эффективен метод hexdigest, который отдает дайджест в тип строки в коде ASCII, состоящей из 32 шестнадцатеричных символов, соответствующих 16 байтам. Он эквивалентен следующему адресу:</p>
<blockquote><p>def hexdigest<br />
ret = &#8216; &#8216;<br />
digest.each_byte {lil ret &lt;&lt; sprintf(&#8217;%02x &#8216; , i) }<br />
end<br />
secret.hexdigest # Mb30e77a94604b7Sbd7a7e64ad500f3c2 &#8221;<br />
Короче говоря, для получения MD5-свертки нужно написать:<br />
require &#8216;md5&#8242;<br />
m = MD5.new(&#8221;Секретные данные&#8221;).hexdigest</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ruby-doc.ru/post/78/feed</wfw:commentRss>
		</item>
		<item>
		<title>Вычисление 32-разрядного CRC</title>
		<link>http://ruby-doc.ru/post/77</link>
		<comments>http://ruby-doc.ru/post/77#comments</comments>
		<pubDate>Fri, 08 Aug 2008 09:32:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[строки]]></category>

		<category><![CDATA[string]]></category>

		<category><![CDATA[пример]]></category>

		<guid isPermaLink="false">http://ruby-doc.ru/?p=77</guid>
		<description><![CDATA[Контрольный код циклической избыточности (Cyclic Redundancy Checksum,CRC) — прекрасно славный путь получить «сигнатуру» файла или произвольного массива байтов. CRC отличается тем свойством, что возможность получения одинакового кода для различных входных данных равна 1 /2**N, где N- число битов результата (наиболее часто 32).
Вычислить его разрешает библиотека zlib, написанная Уэно Кацухиро (Ueno Каtsuhiro). Метод сгс32 вычисляет CRC [...]]]></description>
			<content:encoded><![CDATA[<p>Контрольный код циклической избыточности (Cyclic Redundancy Checksum,CRC) — прекрасно славный путь получить «сигнатуру» файла или произвольного массива байтов. CRC отличается тем свойством, что возможность получения одинакового кода для различных входных данных равна 1 /2**N, где N- число битов результата (наиболее часто 32).<br />
Вычислить его разрешает библиотека zlib, написанная Уэно Кацухиро (Ueno Каtsuhiro). Метод сгс32 вычисляет CRC для строки, переданной в качестве размера.</p>
<blockquote><p>require &#8216;zlib&#8217;<br />
include Zlib<br />
crc = crc32(&#8221;Hello&#8221;) # 4157704578<br />
crc = crc32(&#8221; world!&#8221;,crc) # 461707669<br />
crc = crc32(&#8221;Hello world!&#8221;) # 461707669 (то же, что и выше)</p></blockquote>
<p>В качестве свободного второго размера можно объяснить раньше вычисленный CRC. Ответ получится такой, как в случае, если бы конкатенировать обе линии и вычислить CRC для объединения. Это полезно, к примеру, когда необходимо вычислить CRC файла столь большого, что прочитать его можно только по частям.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruby-doc.ru/post/77/feed</wfw:commentRss>
		</item>
		<item>
		<title>Генерирование последовательности строк</title>
		<link>http://ruby-doc.ru/post/76</link>
		<comments>http://ruby-doc.ru/post/76#comments</comments>
		<pubDate>Fri, 08 Aug 2008 09:30:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[строки]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://ruby-doc.ru/?p=76</guid>
		<description><![CDATA[Иногда бывает необходимо принять «следующую» строку. Так, следующей для строки &#8220;ааа&#8221; будет строка &#8220;aab&#8221; (потом &#8220;aac&#8221;, &#8220;aad&#8221; и так далее). В Ruby для этой задачи есть способ succ:
droid = &#8220;R2D2&#8243;
inproved = droid.succ # &#8220;R2D3&#8243;
pill = &#8220;Vitamin B&#8221;
pill2 = pill.succ # &#8220;Vitamin C&#8221;
He рекомендуется использовать данный метод, в случае, если точно не известно, что первоначальное значение [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда бывает необходимо принять «следующую» строку. Так, следующей для строки &#8220;ааа&#8221; будет строка &#8220;aab&#8221; (потом &#8220;aac&#8221;, &#8220;aad&#8221; и так далее). В Ruby для этой задачи есть способ succ:</p>
<blockquote><p>droid = &#8220;R2D2&#8243;<br />
inproved = droid.succ # &#8220;R2D3&#8243;<br />
pill = &#8220;Vitamin B&#8221;<br />
pill2 = pill.succ # &#8220;Vitamin C&#8221;</p></blockquote>
<p>He рекомендуется использовать данный метод, в случае, если точно не известно, что первоначальное значение предсказуемо и разумно. В случае, если начать с какой-нибудь иностранной<br />
строки, то рано или поздно вы получите странный факт.<br />
Существует также метод upto, который в цикле вызывает succ, пока не будет<br />
достигнуто последнее значение:</p>
<blockquote><p>&#8220;Files, A&#8221;.upto &#8220;Files, X&#8221; do |letter|<br />
puts &#8220;Opening: #{letter}&#8221;<br />
end</p></blockquote>
<p>Еще разок подчеркнем, что эта реальность применяется редко, да и то на ваш страх и риск. Кстати, метода, возвращающего «предшествующую» строку, не существует.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruby-doc.ru/post/76/feed</wfw:commentRss>
		</item>
		<item>
		<title>Печать специальных символов</title>
		<link>http://ruby-doc.ru/post/75</link>
		<comments>http://ruby-doc.ru/post/75#comments</comments>
		<pubDate>Fri, 08 Aug 2008 09:28:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[строки]]></category>

		<guid isPermaLink="false">http://ruby-doc.ru/?p=75</guid>
		<description><![CDATA[Метод dump позволяет произвести графическое изображение символов, которые постоянно не печатаются совсем или вызывают побочные результаты:
# Добавлено три символа ASCII BEL.
# Печатается: Вниманиё\007\007\007
# Печатается: abc\t\tdef\tghi\n\n
si = &#8220;Внимание&#8221; « 7 « 7 « 7
pats si.dump
s2 = &#8220;abc\t\tdef\tghi\n\n&#8221;
pets s2.dump
s3 = &#8220;Двойная кавычка: \&#8221;"
puts s3.dump # Печатается: Двойная кавычка: \&#8221;
При стандартном значении переменной $KCODE метод dump дает такой [...]]]></description>
			<content:encoded><![CDATA[<p>Метод dump позволяет произвести графическое изображение символов, которые постоянно не печатаются совсем или вызывают побочные результаты:</p>
<blockquote><p># Добавлено три символа ASCII BEL.<br />
# Печатается: Вниманиё\007\007\007<br />
# Печатается: abc\t\tdef\tghi\n\n<br />
si = &#8220;Внимание&#8221; « 7 « 7 « 7<br />
pats si.dump<br />
s2 = &#8220;abc\t\tdef\tghi\n\n&#8221;<br />
pets s2.dump<br />
s3 = &#8220;Двойная кавычка: \&#8221;"<br />
puts s3.dump # Печатается: Двойная кавычка: \&#8221;</p></blockquote>
<p>При стандартном значении переменной $KCODE метод dump дает такой же результат, как вызов метода inspect для строки.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruby-doc.ru/post/75/feed</wfw:commentRss>
		</item>
		<item>
		<title>Удаление заданных символов</title>
		<link>http://ruby-doc.ru/post/74</link>
		<comments>http://ruby-doc.ru/post/74#comments</comments>
		<pubDate>Fri, 08 Aug 2008 09:26:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[строки]]></category>

		<category><![CDATA[символы]]></category>

		<guid isPermaLink="false">http://ruby-doc.ru/?p=74</guid>
		<description><![CDATA[Метод delete удаляет из строки те символы, которые включены в перечень, передаваемый в качестве размера:
si = &#8220;To be, or not to be&#8221;
s2 = si.delete (&#8221;b&#8221;) ii &#8220;To e, or not to e&#8221;
s3 = &#8220;Veni, vidi, vici!&#8221;
s4 = s3.delete(&#8221;,!&#8221;) # &#8220;Veni vidi vici&#8221;
Данный параметр идет тем же правилам, что и параметр метода count, т.е. допускаются символы [...]]]></description>
			<content:encoded><![CDATA[<p>Метод delete удаляет из строки те символы, которые включены в перечень, передаваемый в качестве размера:</p>
<blockquote><p>si = &#8220;To be, or not to be&#8221;<br />
s2 = si.delete (&#8221;b&#8221;) ii &#8220;To e, or not to e&#8221;<br />
s3 = &#8220;Veni, vidi, vici!&#8221;<br />
s4 = s3.delete(&#8221;,!&#8221;) # &#8220;Veni vidi vici&#8221;</p></blockquote>
<p>Данный параметр идет тем же правилам, что и параметр метода count, т.е. допускаются символы — (дефис) и ^(каре). Имеется также метод delete!.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruby-doc.ru/post/74/feed</wfw:commentRss>
		</item>
		<item>
		<title>Удаление дубликатов</title>
		<link>http://ruby-doc.ru/post/73</link>
		<comments>http://ruby-doc.ru/post/73#comments</comments>
		<pubDate>Fri, 08 Aug 2008 09:24:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[строки]]></category>

		<guid isPermaLink="false">http://ruby-doc.ru/?p=73</guid>
		<description><![CDATA[Цепочки повторяющихся флагов можно сжать до одного методом squeeze:
si = &#8220;bookkeeper&#8221;
s2 = si.squeeze # &#8220;bokeper&#8221;
s3 = &#8220;Hello&#8230; &#8221;
s4 = s3.squeeze # &#8220;Helo.&#8221;
В случае, если указан параметр, то будут выходить только дубликаты заданных в нем символов:
s5 = s3.squeeze(&#8221;.&#8221;) # &#8220;Hello.&#8221;
Данный параметр идет тем же правилам, что и параметр метода count, т.е. допускаются дефис и символ ^.
Имеется [...]]]></description>
			<content:encoded><![CDATA[<p>Цепочки повторяющихся флагов можно сжать до одного методом squeeze:</p>
<blockquote><p>si = &#8220;bookkeeper&#8221;<br />
s2 = si.squeeze # &#8220;bokeper&#8221;<br />
s3 = &#8220;Hello&#8230; &#8221;<br />
s4 = s3.squeeze # &#8220;Helo.&#8221;</p></blockquote>
<p>В случае, если указан параметр, то будут выходить только дубликаты заданных в нем символов:</p>
<blockquote><p>s5 = s3.squeeze(&#8221;.&#8221;) # &#8220;Hello.&#8221;</p></blockquote>
<p>Данный параметр идет тем же правилам, что и параметр метода count, т.е. допускаются дефис и символ ^.<br />
Имеется также метод squeeze!.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruby-doc.ru/post/73/feed</wfw:commentRss>
		</item>
		<item>
		<title>Обращение строки</title>
		<link>http://ruby-doc.ru/post/72</link>
		<comments>http://ruby-doc.ru/post/72#comments</comments>
		<pubDate>Thu, 07 Aug 2008 22:53:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[строки]]></category>

		<category><![CDATA[array]]></category>

		<category><![CDATA[split]]></category>

		<category><![CDATA[str]]></category>

		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://ruby-doc.ru/?p=72</guid>
		<description><![CDATA[Для обращения строк служит метод reverse (или его вариант для обращения «на месте» reverse!):
si = &#8220;Star Trek&#8221;
s2 = si. reverse if &#8220;kerT ratS&#8221;
si.reverse! S si теперь равно &#8220;kerT ratS&#8221;
Пусть требуется изменить порядок выступлений (а не символов). Тогда можно снова воспользоваться методом stringSsplit, который отдаст массив слов. В клас
Array тоже есть способ reverse, затем можно обратить [...]]]></description>
			<content:encoded><![CDATA[<p>Для обращения строк служит метод reverse (или его вариант для обращения «на месте» reverse!):</p>
<blockquote><p>si = &#8220;Star Trek&#8221;<br />
s2 = si. reverse if &#8220;kerT ratS&#8221;<br />
si.reverse! S si теперь равно &#8220;kerT ratS&#8221;</p></blockquote>
<p>Пусть требуется изменить порядок выступлений (а не символов). Тогда можно снова воспользоваться методом stringSsplit, который отдаст массив слов. В клас<br />
Array тоже есть способ reverse, затем можно обратить массив, а потом с помощью приема join связать слова в последнюю строчку:</p>
<blockquote><p>phrase = &#8220;Nov; here&#8217;s a sentence&#8221;<br />
phrase.split(&#8221; &#8220;).reverse.join(&#8221; &#8220;)<br />
# &#8220;sentence a here&#8217;s Now&#8221;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ruby-doc.ru/post/72/feed</wfw:commentRss>
		</item>
		<item>
		<title>Подсчет числа символов в строке</title>
		<link>http://ruby-doc.ru/post/71</link>
		<comments>http://ruby-doc.ru/post/71#comments</comments>
		<pubDate>Thu, 07 Aug 2008 22:51:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[строки]]></category>

		<guid isPermaLink="false">http://ruby-doc.ru/?p=71</guid>
		<description><![CDATA[Метод count подсчитывает число вхождений в строку символов из заданного набора:
si = &#8220;abracadabra&#8221;
b = si.count (&#8221;Mr&#8221;) # 5
Строковый параметр ведет себя как простое регулярное выражение. Если он
начинается с символа Л, то берется дополнение к списку:
с = sl.count(,/4a&#8221;) # 6
d = sl.count(&#8221;"bdr&#8221;) #6
Дефис обозначает диапазон символов:
е = sl.count(&#8221;a-d&#8221;) # 9
f = si.count(&#8221;Ла-Д&#8221;) # 2
2.28. Подсчет числа [...]]]></description>
			<content:encoded><![CDATA[<p>Метод count подсчитывает число вхождений в строку символов из заданного набора:</p>
<blockquote><p>si = &#8220;abracadabra&#8221;<br />
b = si.count (&#8221;Mr&#8221;) # 5</p></blockquote>
<p>Строковый параметр ведет себя как простое регулярное выражение. Если он<br />
начинается с символа Л, то берется дополнение к списку:</p>
<blockquote><p>с = sl.count(,/4a&#8221;) # 6<br />
d = sl.count(&#8221;"bdr&#8221;) #6</p></blockquote>
<p>Дефис обозначает диапазон символов:</p>
<blockquote><p>е = sl.count(&#8221;a-d&#8221;) # 9<br />
f = si.count(&#8221;Ла-Д&#8221;) # 2</p></blockquote>
<p>2.28. Подсчет числа символов в строке</p>
<blockquote><p>а = si.count(&#8221;с&#8221;) # 1</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ruby-doc.ru/post/71/feed</wfw:commentRss>
		</item>
		<item>
		<title>Сжатие строк</title>
		<link>http://ruby-doc.ru/post/70</link>
		<comments>http://ruby-doc.ru/post/70#comments</comments>
		<pubDate>Thu, 07 Aug 2008 22:51:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[строки]]></category>

		<category><![CDATA[str]]></category>

		<category><![CDATA[string]]></category>

		<category><![CDATA[сжатие]]></category>

		<guid isPermaLink="false">http://ruby-doc.ru/?p=70</guid>
		<description><![CDATA[Ради сокращения строк и файлов используется библиотека zlib.
Зачем может уйти сжимать строки? Очевидно, чтобы ускорить ввод/
вывод из базы данных, оптимизировать применение сети или усложнить распознавание строк.
В классах Deflate и Inflate существуют способы класса deflate и inflate соответственно.
У метода deflate (он выполняет сжатие) ест.Ь дополнительный параметр,
задающий режим сжатия. Он определяет компромисс между свойством сжатия и
скоростью. В [...]]]></description>
			<content:encoded><![CDATA[<p>Ради сокращения строк и файлов используется библиотека zlib.<br />
Зачем может уйти сжимать строки? Очевидно, чтобы ускорить ввод/<br />
вывод из базы данных, оптимизировать применение сети или усложнить распознавание строк.<br />
В классах Deflate и Inflate существуют способы класса deflate и inflate соответственно.<br />
У метода deflate (он выполняет сжатие) ест.Ь дополнительный параметр,<br />
задающий режим сжатия. Он определяет компромисс между свойством сжатия и<br />
скоростью. В случае, если значение равно BEST_COMPRESSION, то строка сжимается максимально,<br />
однако это занимает относительно много-много времени. Значение BEST_SPEED задаст<br />
большую скорость, однако при этом строка сжимается хуже. Подразумеваемое<br />
по умолчанию значение DEFAULT_COMPRESSION выбирает компромиссный режим.</p>
<blockquote><p>require &#8216;zlib&#8217;<br />
include Zlib<br />
long_string = (&#8221;abcde&#8221;*71 + &#8220;defghi&#8221;*79 + &#8220;ghijkl&#8221;*113)*371<br />
# long_string состоит из 559097 символов.<br />
si = Deflate.deflate(long_string,BEST_SPEED) # 4188 символов.<br />
s3 = Deflate.deflate(long_string) # 3568 символов<br />
s2 = Deflate.deflate(long_string,BEST_COMPRESSION) # 2120 символов</p></blockquote>
<p>Неформальные опыты показывают, что скорость отличается приблизительно<br />
в два присеста, а плотность сжатия — в обратной пропорции на ту же величину. И скорость, и плотность сильно зависят от состава строки. Разумеется, на скорость воздействует и наличествующее средство.<br />
Имейте в виду, что существует пороговое значение длины строки. В случае, если строка<br />
короче, то сжимать ее почти бесполезно (в случае, если только вы не собираетесь предпринять ее нечитаемой). В этом эпизоде неизбежные накладные затраты могут даже привести к тому, что сжатая линия будет длиннее исходной.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruby-doc.ru/post/70/feed</wfw:commentRss>
		</item>
		<item>
		<title>Шифрование строк</title>
		<link>http://ruby-doc.ru/post/69</link>
		<comments>http://ruby-doc.ru/post/69#comments</comments>
		<pubDate>Thu, 07 Aug 2008 22:49:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[строки]]></category>

		<category><![CDATA[ssl]]></category>

		<category><![CDATA[UNIX]]></category>

		<category><![CDATA[пример]]></category>

		<guid isPermaLink="false">http://ruby-doc.ru/?p=69</guid>
		<description><![CDATA[Порой нежелательно, чтобы линии можно было нетрудно распознать. К примеру,пароли не нужно хранить в чистом виде, какими бы ограничительными ни были права прохода к файлу.
В стандартном методе crypt существует стандартная функция с тем же именем для шифрования строки по алгоритму DES. Она принимает в качестве размера «затравку» (ее назначение то же, что у затравки генератора [...]]]></description>
			<content:encoded><![CDATA[<p>Порой нежелательно, чтобы линии можно было нетрудно распознать. К примеру,пароли не нужно хранить в чистом виде, какими бы ограничительными ни были права прохода к файлу.<br />
В стандартном методе crypt существует стандартная функция с тем же именем для шифрования строки по алгоритму DES. Она принимает в качестве размера «затравку» (ее назначение то же, что у затравки генератора случайных чисел). На платформах, отличных от UNIX, параметр может существовать иным.<br />
Ниже показано тривиальное приложение, которое требует пароль, знакомый любителям Толкиена:</p>
<blockquote><p>coded = &#8220;hfCghHIE5LAM.&#8221; ;<br />
puts &#8220;Говори, друг, и жми Enter!&#8221;<br />
print &#8220;Пароль: &#8221; ,<br />
password = gets.chop<br />
if password.crypt(&#8221;hf&#8221;) == .coded<br />
puts &#8220;Добро пожаловать!&#8221; ;<br />
else i<br />
puts &#8220;Кто ты, орк?&#8221;<br />
end</p></blockquote>
<p>Стоит сказать, что на такое шифрование не стоит рассчитывать в серверных<br />
Web-приложениях, так как пароль, введенный в земле фигуры, все одинаково распространяется по сети в чистом виде. В таких примерах легче всего использовать протоколом SSL (Secure Sockets Layer). Разумеется, никто не мешает иметь шифрованием на сервере, однако по другой причине — чтобы защитить пароль в хранилише, а не во время трансляции по сети.</p>
]]></content:encoded>
			<wfw:commentRss>http://ruby-doc.ru/post/69/feed</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.209 seconds -->

