Windows で Digest::SHA1 というモジュールを使って
文字列のSHA1ハッシュを生成するプログラムを作ったのですが、
$x = <STDIN>;
と書き、100 と入力して生成したハッシュと、
あらかじめ
$x = 100;
のように設定しておいて生成したハッシュとでは、内容が異なっています。
前者は 310b86......、後者は 6a2903...... と出ます。
これはなぜでしょうか?
一致させるにはどうすれば良いのでしょうか。
ご教示ください。よろしくお願いいたします。
No.1
- 回答日時:
# OO style
use Digest::SHA1;
my $Digest1;
my $Digest1Arg;
my $Digest2;
my $Digest2Arg;
my $Digest3;
my $Digest3Arg;
my $Digest4;
my $Digest4Arg;
$Digest1 = Digest::SHA1->new;
$Digest1Arg = 100;
$Digest1->add($Digest1Arg);
print $Digest1->hexdigest;
print "\n";
$Digest2 = Digest::SHA1->new;
$Digest2Arg = "100";
$Digest2->add($Digest2Arg);
print $Digest2->hexdigest;
print "\n";
$Digest3 = Digest::SHA1->new;
$Digest3Arg = <STDIN>;
$Digest3->add($Digest3Arg);
print $Digest3->hexdigest;
print "\n";
$Digest4 = Digest::SHA1->new;
$Digest4Arg = <STDIN>;
chomp($Digest4Arg);
$Digest4->add($Digest4Arg);
print $Digest4->hexdigest;
print "\n";
=====
perl Q3189946-1.pl
310b86e0b62b828562fc91c7be5380a992b2786a
310b86e0b62b828562fc91c7be5380a992b2786a
100
6a2903b37751bca2bb4e3ee462092fa957d6cd35
100
310b86e0b62b828562fc91c7be5380a992b2786a
No.2ベストアンサー
- 回答日時:
$x = <STDIN> で、$xに代入される値は改行が末尾に含まれるためです。
chompで改行を除去しましょう。
$x = 100;
print Digest::SHA1::sha1_hex($x) . "\n";
$data = <STDIN>;
chomp($x);
print Digest::SHA1::sha1_hex($x) . "\n";
ご回答ありがとうございます。
改行の有無だったのですか。納得しました。
chompという関数も初めて知りました。
試してみます。
No.3
- 回答日時:
日本語に限らず、文字入力の決定とか終了の命令を送れるのがエンターキーですが、これは、目には直接見えない[改行]という記号をパソコンに送っています。
これに、ただ決定と言う意味をパソコンが持たせているだけで、本質は改行の記号です。(これからは改行=\nと表記)
なので、単純に[100]と入力しても、パソコンが認識するのは、[100\n]となります。
どんなデータにもいえますが、直接データを入力すると、末尾に\nが入ります。
意外にこれを知らないと、プログラミングに多大な影響が出るケースもあります。
\nを消す有効な関数はxpectorさんが書いているので、数字の改行を取り除く方法を書いておきます。
$x+=0;
これを入力処理の後に入れてください。数字の場合、計算すれば\nは消えます。数字に影響がないように、0を足しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
16進の10進変換について
-
関数「exists」と「defined」の...
-
switch文のエラーについて
-
python3について。
-
チェックボックスのCGIへの値の...
-
pythonで演算子を変数に代入す...
-
c言語 16進数の2進数への変換
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
テーブル内でドロップダウンメ...
-
formで特定のinputを送信しない...
-
VBAでPDFのコピーとリネームを...
-
Perlで自分自身の関数名を知る...
-
Perlからメール送信で文字化け
-
<SELECT>タグの折り返し
-
子windowsからsubmit()後にclos...
-
コンボボックスのtag情報の取得...
-
エクセルVBA シート名の部分一...
-
Sendmailの文字化けについて
-
sendmailで本文が文字化けします
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
16進の10進変換について
-
pythonで演算子を変数に代入す...
-
【至急!!!】python言語で本を見...
-
pythonの*
-
c言語 16進数の2進数への変換
-
awkの正規表現での最左最短マッ...
-
数値かどうかの判定方法
-
関数「exists」と「defined」の...
-
シェルで、ランダム関数を変数...
-
I2C接続のLCDディスプレイを使う
-
シェルスクリプトで、空白(ス...
-
perでメールが送信出来ない場合...
-
UWSCのSELECT文の記述方法
-
int(input("○○"))の使い方
-
switch文のエラーについて
-
pythonで改行を含めてfindする方法
-
シェルスクリプト+perl
-
PythonでUTF8の文字列をリスト...
-
少数点以下の桁数について
-
qq!!の意味を教えてください。
おすすめ情報