合計 昨日 今日
インフォメーション: 当サイトは3/3~3/4に大規模なメンテを実施し大幅リニューアルします。そのため3/3~3/4に長時間の利用停止時間が発生します。ご了承ください。

naohiro19
 
記事: 247
登録日時: 2010年10月16日(土) 20:16
お住まい: 愛知県
日記: 日記を見る (122)
日記
- 2月 2018
+ 1月 2018
+ 12月 2017
+ 11月 2017
+ 10月 2017
+ 8月 2017
+ 7月 2017
+ 6月 2017
+ 5月 2017
+ 1月 2017
+ 9月 2016
+ 8月 2016
+ 7月 2016
+ 6月 2016
+ 5月 2016
+ 4月 2016
+ 9月 2015
+ 8月 2015
+ 7月 2015
+ 6月 2015
+ 11月 2014
+ 10月 2014
+ 8月 2014
+ 7月 2014
+ 6月 2014
+ 5月 2014
+ 4月 2014
+ 3月 2014
+ 12月 2013
+ 10月 2013
+ 9月 2013
+ 7月 2013
+ 6月 2013
+ 5月 2013
+ 10月 2012
+ 8月 2012
+ 7月 2012
+ 6月 2012
+ 5月 2012
+ 11月 2011
カテゴリー
講座
7 記事
勉強
4 記事
プログラミング
36 記事
フィード
次へ

[C#] MD5とSHA1のハッシュ計算

パーマリンクby naohiro19 on 2018年2月21日(水) 02:39 カテゴリー: プログラミング

ファイルのMD5やSHA1などでハッシュ値を計算する - .NET Tips (VB.NET,C#...)

Windows フォームアプリケーションで作ったので参考にどうぞ。
「ファイルを開く」というボタンをクリックするとファイルを開いてMD5とSHA1のハッシュ値を自動計算してくれます。
Dobon.netの説明にもあるとおり、「MD5CryptoServiceProviderクラス」「SHA1CryptoServiceProviderクラス」を使っています。
コード[C#]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// Form1.Designer.cs
namespace HashCalcate
{
    partial class Form1
    {
        /// <summary>
        /// 必要なデザイナー変数です。
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        /// <param name="disposing">マネージ リソースを破棄する場合は true を指定し、その他の場合は false を指定します。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Windows フォーム デザイナーで生成されたコード
 
        /// <summary>
        /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディターで変更しないでください。
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.textBox3 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(181, 12);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "ファイルを開く";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // openFileDialog1
            //
            this.openFileDialog1.Filter = "すべてのファイル(*.*)|*.*";
            this.openFileDialog1.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog1_FileOk);
            //
            // textBox1
            //
            this.textBox1.Location = new System.Drawing.Point(13, 12);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(162, 19);
            this.textBox1.TabIndex = 1;
            //
            // label1
            //
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(13, 38);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(28, 12);
            this.label1.TabIndex = 2;
            this.label1.Text = "MD5";
            //
            // label2
            //
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(13, 72);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(34, 12);
            this.label2.TabIndex = 3;
            this.label2.Text = "SHA1";
            //
            // textBox2
            //
            this.textBox2.Location = new System.Drawing.Point(15, 50);
            this.textBox2.Name = "textBox2";
            this.textBox2.ReadOnly = true;
            this.textBox2.Size = new System.Drawing.Size(241, 19);
            this.textBox2.TabIndex = 4;
            //
            // textBox3
            //
            this.textBox3.Location = new System.Drawing.Point(12, 87);
            this.textBox3.Name = "textBox3";
            this.textBox3.ReadOnly = true;
            this.textBox3.Size = new System.Drawing.Size(241, 19);
            this.textBox3.TabIndex = 5;
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(270, 117);
            this.Controls.Add(this.textBox3);
            this.Controls.Add(this.textBox2);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.button1);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "Form1";
            this.Text = "ハッシュ値計算";
            this.ResumeLayout(false);
            this.PerformLayout();
 
        }
 
        #endregion
 
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.OpenFileDialog openFileDialog1;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.TextBox textBox3;
    }
}

コード[C#]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;
using System.Windows.Forms;
 
namespace HashCalcate
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
        }
 
        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            textBox1.Text = openFileDialog1.FileName;
            textBox1.ReadOnly = true;
            try
            {
                using (var fs = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    var md5 = new MD5CryptoServiceProvider();
                    byte[] bs = md5.ComputeHash(fs);
                    md5.Clear();
                    textBox2.Text = BitConverter.ToString(bs).Replace("-", "");
 
                    var sha1 = new SHA1CryptoServiceProvider();
                    byte[] bs2 = sha1.ComputeHash(fs);
                    sha1.Clear();
                    textBox3.Text = BitConverter.ToString(bs2).Replace("-", "");                    
                }
            }catch(Exception ex)
            {
                MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}

コード[C#]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
 
namespace HashCalcate
{
    static class Program
    {
        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
最後に編集したユーザー naohiro19 [ 2018年2月21日(水) 02:42 ], 累計 1 回

コメント数: 1 閲覧数: 100

[C++]ファイナルファンタジー10のアルベド語を日本語に翻訳するプログラム

パーマリンクby naohiro19 on 2018年2月13日(火) 23:59 カテゴリー: プログラミング

PS2用ゲームソフト「ファイナルファンタジー10」に登場する"アルベド語"を日本語にする変換プログラムを作ってみました。
以下ソース
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#pragma once
 
#include <string>
#include <regex>
 
namespace ff10 {
    inline
    std::wstring FromAlbedToJapanese(std::wstring src)
    {
        src = std::regex_replace(src, std::wregex(L"ア"), L"か");
        src = std::regex_replace(src, std::wregex(L"イ"), L"み");
        src = std::regex_replace(src, std::wregex(L"ウ"), L"る");
        src = std::regex_replace(src, std::wregex(L"エ"), L"れ");
        src = std::regex_replace(src, std::wregex(L"オ"), L"の");
        src = std::regex_replace(src, std::wregex(L"カ"), L"わ");
        src = std::regex_replace(src, std::wregex(L"キ"), L"し");
        src = std::regex_replace(src, std::wregex(L"ク"), L"ふ");
        src = std::regex_replace(src, std::wregex(L"ケ"), L"へ");
        src = std::regex_replace(src, std::wregex(L"コ"), L"も");
        src = std::regex_replace(src, std::wregex(L"サ"), L"た");
        src = std::regex_replace(src, std::wregex(L"シ"), L"に");
        src = std::regex_replace(src, std::wregex(L"ス"), L"ぬ");
        src = std::regex_replace(src, std::wregex(L"セ"), L"て");
        src = std::regex_replace(src, std::wregex(L"ソ"), L"と");
        src = std::regex_replace(src, std::wregex(L"タ"), L"や");
        src = std::regex_replace(src, std::wregex(L"チ"), L"き");
        src = std::regex_replace(src, std::wregex(L"ツ"), L"む");
        src = std::regex_replace(src, std::wregex(L"テ"), L"け");
        src = std::regex_replace(src, std::wregex(L"ト"), L"お");
        src = std::regex_replace(src, std::wregex(L"ナ"), L"ら");
        src = std::regex_replace(src, std::wregex(L"ニ"), L"り");
        src = std::regex_replace(src, std::wregex(L"ヌ"), L"す");
        src = std::regex_replace(src, std::wregex(L"ネ"), L"え");
        src = std::regex_replace(src, std::wregex(L"ノ"), L"ろ");
        src = std::regex_replace(src, std::wregex(L"ハ"), L"な");
        src = std::regex_replace(src, std::wregex(L"ヒ"), L"ち");
        src = std::regex_replace(src, std::wregex(L"フ"), L"う");
        src = std::regex_replace(src, std::wregex(L"ヘ"), L"せ");
        src = std::regex_replace(src, std::wregex(L"ホ"), L"そ");
        src = std::regex_replace(src, std::wregex(L"マ"), L"は");
        src = std::regex_replace(src, std::wregex(L"ミ"), L"い");
        src = std::regex_replace(src, std::wregex(L"ム"), L"を");
        src = std::regex_replace(src, std::wregex(L"メ"), L"ね");
        src = std::regex_replace(src, std::wregex(L"モ"), L"よ");
        src = std::regex_replace(src, std::wregex(L"ヤ"), L"ま");
        src = std::regex_replace(src, std::wregex(L"ユ"), L"つ");
        src = std::regex_replace(src, std::wregex(L"ヨ"), L"こ");
        src = std::regex_replace(src, std::wregex(L"ラ"), L"さ");
        src = std::regex_replace(src, std::wregex(L"リ"), L"ひ");
        src = std::regex_replace(src, std::wregex(L"ル"), L"く");
        src = std::regex_replace(src, std::wregex(L"レ"), L"め");
        src = std::regex_replace(src, std::wregex(L"ロ"), L"ほ");
        src = std::regex_replace(src, std::wregex(L"ワ"), L"あ");
        src = std::regex_replace(src, std::wregex(L"ヲ"), L"ゆ");
        src = std::regex_replace(src, std::wregex(L"ン"), L"ん");
        src = std::regex_replace(src, std::wregex(L"ッ"), L"っ");
        src = std::regex_replace(src, std::wregex(L"ガ"), L"だ");
        src = std::regex_replace(src, std::wregex(L"ギ"), L"じ");
        src = std::regex_replace(src, std::wregex(L"グ"), L"づ");
        src = std::regex_replace(src, std::wregex(L"ゲ"), L"ぜ");
        src = std::regex_replace(src, std::wregex(L"ゴ"), L"ど");
        src = std::regex_replace(src, std::wregex(L"ザ"), L"ば");
        src = std::regex_replace(src, std::wregex(L"ジ"), L"ぎ");
        src = std::regex_replace(src, std::wregex(L"ズ"), L"ぶ");
        src = std::regex_replace(src, std::wregex(L"ゼ"), L"べ");
        src = std::regex_replace(src, std::wregex(L"ゾ"), L"ご");
        src = std::regex_replace(src, std::wregex(L"ダ"), L"が");
        src = std::regex_replace(src, std::wregex(L"ヂ"), L"び");
        src = std::regex_replace(src, std::wregex(L"ヅ"), L"ぐ");
        src = std::regex_replace(src, std::wregex(L"デ"), L"げ");
        src = std::regex_replace(src, std::wregex(L"ド"), L"ぼ");
        src = std::regex_replace(src, std::wregex(L"バ"), L"ざ");
        src = std::regex_replace(src, std::wregex(L"ビ"), L"ぢ");
        src = std::regex_replace(src, std::wregex(L"ブ"), L"ず");
        src = std::regex_replace(src, std::wregex(L"ベ"), L"で");
        src = std::regex_replace(src, std::wregex(L"ボ"), L"ぞ");
        src = std::regex_replace(src, std::wregex(L"パ"), L"ぷ");
        src = std::regex_replace(src, std::wregex(L"ピ"), L"ぽ");
        src = std::regex_replace(src, std::wregex(L"プ"), L"ぱ");
        src = std::regex_replace(src, std::wregex(L"ペ"), L"ぴ");
        src = std::regex_replace(src, std::wregex(L"ポ"), L"ペ");
        src = std::regex_replace(src, std::wregex(L"ァ"), L"ぁ");
        src = std::regex_replace(src, std::wregex(L"ィ"), L"ぃ");
        src = std::regex_replace(src, std::wregex(L"ゥ"), L"ぅ");
        src = std::regex_replace(src, std::wregex(L"ェ"), L"ぇ");
        src = std::regex_replace(src, std::wregex(L"ォ"), L"ぉ");
        src = std::regex_replace(src, std::wregex(L"ッ"), L"っ");
        src = std::regex_replace(src, std::wregex(L"ャ"), L"ゃ");
        src = std::regex_replace(src, std::wregex(L"ュ"), L"ゅ");
        src = std::regex_replace(src, std::wregex(L"ョ"), L"ょ");
 
        return src;
    }
    inline
    std::wstring FromJapaneseToAlbed(std::wstring src)
    {
        src = std::regex_replace(src, std::wregex(L"あ"), L"ワ");
        src = std::regex_replace(src, std::wregex(L"い"), L"ミ");
        src = std::regex_replace(src, std::wregex(L"う"), L"フ");
        src = std::regex_replace(src, std::wregex(L"え"), L"ネ");
        src = std::regex_replace(src, std::wregex(L"お"), L"ト");
        src = std::regex_replace(src, std::wregex(L"か"), L"ア");
        src = std::regex_replace(src, std::wregex(L"き"), L"チ");
        src = std::regex_replace(src, std::wregex(L"く"), L"ル");
        src = std::regex_replace(src, std::wregex(L"け"), L"テ");
        src = std::regex_replace(src, std::wregex(L"こ"), L"ヨ");
        src = std::regex_replace(src, std::wregex(L"さ"), L"ラ");
        src = std::regex_replace(src, std::wregex(L"し"), L"キ");
        src = std::regex_replace(src, std::wregex(L"す"), L"ヌ");
        src = std::regex_replace(src, std::wregex(L"せ"), L"ヘ");
        src = std::regex_replace(src, std::wregex(L"そ"), L"ホ");
        src = std::regex_replace(src, std::wregex(L"た"), L"サ");
        src = std::regex_replace(src, std::wregex(L"ち"), L"ヒ");
        src = std::regex_replace(src, std::wregex(L"つ"), L"ユ");
        src = std::regex_replace(src, std::wregex(L"て"), L"セ");
        src = std::regex_replace(src, std::wregex(L"と"), L"ソ");
        src = std::regex_replace(src, std::wregex(L"な"), L"ハ");
        src = std::regex_replace(src, std::wregex(L"に"&#4...


[ 続き ]
最後に編集したユーザー naohiro19 [ 2018年2月18日(日) 19:47 ], 累計 2 回

コメント数: 0 閲覧数: 77

[C++] std::shared_ptrのサンプル

パーマリンクby naohiro19 on 2018年1月31日(水) 00:15 カテゴリー: プログラミング

えぴ流 C++ 実装スタイル プロ生勉強会 第10回@品川 #pronamaよりプログラムをそのまま移しました。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <string>
#include <vector>
#include <memory>
#include <algorithm>
using namespace std;
 
class pet {
    string name_;
protected:
    string name() const { return name_; }
    virtual void do_make_sound() const = 0;
public:
    pet(const char* name) : name_(name) {}
    virtual ~pet() { cout << name() << " dctor." << endl; }
    void make_sound() const { do_make_sound(); }
};
 
class dog : public pet {
protected:
    virtual void do_make_sound() const { cout << name() << ": わんわんおー" << endl; }
public:
    dog(const char* name) : pet(name) {}
};
 
class cat : public pet {
protected:
    virtual void do_make_sound() const { cout << name() << ": にゃんにゃんおー" << endl; }
public:
    cat(const char* name) : pet(name) {}
};
 
 
 
int main()
{
    vector<shared_ptr<pet>> pets;
 
    vector<shared_ptr<cat>> cats;
    cats.push_back(make_shared<cat>("タマ"));
    cats.push_back(make_shared<cat>("ミケ"));
    cats.push_back(make_shared<cat>("Kitty"));
    for_each(cats.begin(), cats.end(), [](shared_ptr<cat> pet) {pet->make_sound(); });
    {
        vector<shared_ptr<dog>> dogs;
        dogs.push_back(make_shared<dog>("ポチ"));
        dogs.push_back(make_shared<dog>("コロ"));
        dogs.push_back(make_shared<dog>("Lassie"));
        for_each(dogs.begin(), dogs.end(), [](shared_ptr<dog> pet) {pet->make_sound(); });
 
        pets.push_back(cats[0]);
        pets.push_back(dogs[0]);
        pets.push_back(cats[1]);
        pets.push_back(dogs[1]);
 
    }
   
    for_each(pets.begin(), pets.end(), [](shared_ptr<pet> pet) { pet->make_sound(); });
    cout << "That's it." << endl;
}

実行結果は以下のとおりです。
コード[Text]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
タマ: にゃんにゃんおー
ミケ: にゃんにゃんおー
Kitty: にゃんにゃんおー
ポチ: わんわんおー
コロ: わんわんおー
Lassie: わんわんおー
Lassie dctor.
タマ: にゃんにゃんおー
ポチ: わんわんおー
ミケ: にゃんにゃんおー
コロ: わんわんおー
That's it.
Kitty dctor.
タマ dctor.
ポチ dctor.
ミケ dctor.
コロ dctor.

ideone.com上の実行でも同じ結果になりました。

コメント数: 0 閲覧数: 214

[C++] 正規表現ライブラリ

パーマリンクby naohiro19 on 2018年1月29日(月) 12:17 カテゴリー: プログラミング

C++でも C++11で追加された正規表現ライブラリが使えるようになっています。

以下のサンプルは「2015-12-31」という文字列を正規表現を使って「2015年12月31日」に置き換えるサンプルプログラムです。
C++の正規表現ライブラリはJavaScriptの正規表現と互換性があります。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <regex>
using namespace std;
 
int main()
{
    string date = "2015-12-31";
    regex re(R"((\d{4})-(\d{2})-(\d{2}))");
    string fmt = "$1年$2月$3日";
    string result = regex_replace(date, re, fmt);
    cout << result << endl;
}

コメント数: 0 閲覧数: 244

[C++] std::stackを使った10進数を2進数に変換するプログラム

パーマリンクby naohiro19 on 2018年1月25日(木) 00:18 カテゴリー: プログラミング

Cではchar型の配列を用いて変換したものを逆順に表示すればいいですが、かなり桁数が多いと配列オーバーを起こして今います。
C++ では <stack> というヘッダーファイルが用意されるのでpushしたあとにtopで2進数を表示し、popで削除を行えばできます。

以下が書いたプログラムになります。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <stack>
 
using namespace std;
 
int main()
{
   
    stack<int> st;
 
    int n;
 
    cout << "任意の整数を入力してください >";
    cin >> n;
 
    int temp = n;
 
    while (n != 0) {
        st.push(n % 2);
        n /= 2;
    }
 
    cout << temp << "を2進数に変換すると";
    while (!st.empty()) {
        cout << st.top();
        st.pop();
    }
    cout << "になります。" << endl;
    return 0;
}


実行例:
任意の整数を入力してください >100
100を2進数に変換すると1100100になります。

tempは用意したのかというと入力された値を保持して表示するときに使うので用意しました。

コメント数: 2 閲覧数: 357

オンラインデータ

登録ユーザー: みけCAT