68user's page 掲示板

Prev< No. 3885〜3890> Next  [最新発言に戻る] [過去ログ一覧]
No. 3885 # 68user 2004/07/22 (木) 22:18:35
>>3884 jeiu
> 公開鍵の暗号化としてRSAを使いたいが有効鍵ビットは512としたい
> 共有鍵の暗号化としてRC4を使いたいが有効鍵ビットは40としたい
では
    http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc2246-Ja.txt
の RSA_EXPORT_WITH_RC4_40_MD5 で決まりでしょう。RSA かつ
RC4 の 40bit となればこれしか選択肢がありません。

「RSA の鍵長 512bit 以下」という要件についてですが、これは
上記 RFC の
      7.4.3. ServerKeyExchangeメッセージ

          ServerKeyExchangeメッセージは (略) 以下の鍵交換方式で使用される。
                RSA_EXPORT (サーバ証明書の公開鍵が512ビットより長いとき)
          (略)
       注: 現在の米国輸出法では、米国から輸出したソフトウェアにおいては、512
         ビットより長いRSAのモジュラスを鍵交換において使用してはならない
         ことになっている。このメッセージを送信した場合、証明書内に含まれ
         ている512ビットより長いRSA鍵は、RSA_EXPORT鍵交換方式用の、512ビット
         以下の長さを持つ一時的RSA鍵に署名するのに使用される。
で自然とクリアできます。

結局、ciphers(1) に
      SSL_RSA_EXPORT_WITH_RC4_40_MD5 EXP-RC4-MD5
とあるので SSL_connect() の前に
      if ( SSL_CTX_set_cipher_list(ctx, "EXP-RC4-MD5") == 0 ){
            /* error */
      }
という処理を入れればよいでしょう。

No. 3886 # kawa 2004/07/23 (金) 12:16:04
68userさんのサイトで勉強させてもらってます。

http://x68000.q-e-d.net/~68user/net/rfc.html
こちらのページの、POPの「日本語訳」のところがリンクが失敗してる
ようですので、お知らせしておきます。

No. 3887 # 68user 2004/07/24 (土) 00:51:15
>>3886 kawa
> http://x68000.q-e-d.net/~68user/net/rfc.html
> こちらのページの、POPの「日本語訳」のところがリンクが失敗してる
> ようですので、お知らせしておきます。
修正しました。ご連絡ありがとうございました。

No. 3888 # スナフキン 2004/07/24 (土) 17:45:31
自前parseルーチンで以下の様な処理をしています。

foreach(split(/&/, $query)){
    my($name, $value) = split(/=/, $_);

〜日本語処理とかお約束の処理〜

# %FORMに格納
    if(exist $FORM{$name}){;#既に以前の$nameが有れば(2回目以降)
        push($FORM{$name}, $value);#@{$FORM{$name}}の配列に格納
    }else{
        $FORM{$name} = $value;#初めての出現ならば通常通りに格納
    }
}

細かい部分は省略してますが、例えば checkbox などで、

chbox1&val1&chbox1&val2&chbox1&val3

の様なデータが来た場合、

$ALL_VALUE = $FORM{chbox} . " @{$FORM{chbox}}";

として、

$ALL_VALUE = 'val1 val2 val3'

となる事を確認しています。

しかしなぜか、元のデータが複数の時の動作が理解できないのですが、
自分の理解が甘いような気もするので、ぜひとも動作の解説をしもらえない
でしょうか?


以下は確認用のサンプルです。2行目のコメントを外して違いを確認ください。
データの内容によって結果が違います。
変数の内容が判りやすいように print 文を入れています。

$query=qq(cbox1=1&cbox1=2&cbox1=3&cbox2=1&cbox2=2&cbox2=3);
#$query=qq(cbox1=1&cbox1=2&cbox1=3&cbox2=a&cbox2=b&cbox2=c);

    foreach(split(/&/, $query)){
        my($name, $value) = split(/=/, $_);
print qq($name=[$value]\n);

        if(exists $FORM{$name}){

            push(@{$FORM{$name}}, $value);
print qq( ->push:<$name>=[$value] count:). $#{$FORM{$name}} . qq(\n);
        }else{

            $FORM{$name} = $value;

        }
    }

print qq(Result1:[$FORM{'cbox1'} @{$FORM{'cbox1'}}]\n);
print qq(Result2:[$FORM{'cbox2'} @{$FORM{'cbox2'}}]\n);

無名配列が $value の内容によって識別できていないように見えます。

Windows版とLinux版のそれぞれ 5.6.1 で確認しました。

No. 3889 # スナフキン 2004/07/24 (土) 17:48:01
書き忘れましたが perl でのお話です。

No. 3890 # 68user 2004/07/24 (土) 18:18:52
>>3888 スナフキン
$query=qq(cbox1=1&cbox1=2&cbox1=3&cbox2=1&cbox2=4&cbox2=5);
foreach (split(/&/, $query)){
        my($name, $value) = split(/=/, $_);
        print qq($name=[$value]\n);
        if (exists $FORM{$name}){
                push(@{$FORM{$name}}, $value);
                print "\@{$FORM{$name}}=@{$FORM{$name}}\n";
        } else {
                $FORM{$name} = $value;
        }
}
print "\@1=@1\n";


cbox1=[1]
cbox1=[2]
@{1}=2
cbox1=[3]
@{1}=2 3
cbox2=[1]
cbox2=[4]
@{1}=2 3 4
cbox2=[5]
@{1}=2 3 4 5
@1=2 3 4 5

というわけで、最初のループで $FROM{$name} には 1 が入り、
@{$FORM{$name}} はシンボリックリファレンスと解釈され、結局
@1 に push しているわけです。

結局は一度目のループとそれ以降のループを分けず、常に
        push(@{$FORM{$name}}, $value);
すればよいと思いますが、そもそも何をやりたかったのかによりますかね。

Prev< No. 3885〜3890> Next  [最新発言に戻る] [過去ログ一覧]