crypt

crypt

ri

 ----------------------------------------------------------- String#crypt
      str.crypt(other_str)   => new_str
 ------------------------------------------------------------------------
      Applies a one-way cryptographic hash to _str_ by invoking the
      standard library function  crypt . The argument is the salt string,
      which should be two characters long, each character drawn from
       [a-zA-Z0-9./] .
 

refe

 String#crypt
 --- crypt(salt)
 
     self と salt から暗号化された文字列を生成して返します。
     salt には英数字、ドット(.)、スラッシュ(/)から構成される、
     2 バイト以上の文字列を指定します。
 
     salt には、以下の様になるべくランダムな文字列を選ぶべきです。
       salt = [rand(64),rand(64)].pack("C*").tr("\x00-\x3f","A-Za-z0-9./")
       passwd.crypt(salt)
 
     暗号化された文字列から暗号化前の文字列 (self) を求めることは
     一般に*1とされ、self を知っている者のみが同じ暗号化
     された文字列を生成できます。このことから self を知っているか
     どうかの認証に使うことが出来ます。
 
     例えば UNIX パスワードの認証は以下のようにして行われます。
     (この例は Etc.getpwnam で暗号化文字列が得られることを仮定しています)。
 
        require 'etc'
 
        user = "foo"
        passwd = "bar"
 
        ent = Etc.getpwnam(user)
        p passwd.crypt(ent.passwd) == ent.passwd
 
     *2:
 
     * crypt の処理は crypt(3) [manual page] の実装に依存しています。
       従って、crypt で処理される内容の詳細や salt の与え方については、
       利用環境の crypt(3) [manual page] 等を見て確認してください。
 
     * crypt の結果は利用環境が異なると変わる場合があります。
       crypt の結果を、異なる利用環境を通して使用する場合には注意
       して下さい。
 
     * 典型的な DES を使用した crypt(3) [manual page] の場合、
       self の最初の 8 バイトsalt の最初の 2 バイトだけが使用されます。
 

*1*難しい*

*2*注意*