質問編集履歴
3
ご指摘頂いた点から修正したコードを追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -97,6 +97,82 @@
|
|
97
97
|
}
|
98
98
|
```
|
99
99
|
|
100
|
+
###指摘後修正(ベストアンサー後)
|
101
|
+
※今回の問題はそもそも自身のイメージしているバイナリファイルの概念が間違っているのが原因でした。
|
102
|
+
そのため、異常して上げた箇所の動作はそもそもが正常な動作であり、それを間違った解釈から異常と判断していたのが問題でした。
|
103
|
+
```C#
|
104
|
+
/// <summary>
|
105
|
+
/// 公開鍵、秘密鍵のペアを作成してファイル出力する
|
106
|
+
/// </summary>
|
107
|
+
/// <returns>作成した鍵のファイルを格納したフォルダパス。失敗時はNull</returns>
|
108
|
+
public static string PutRSAKey()
|
109
|
+
{
|
110
|
+
|
111
|
+
string putdir = Directory.GetCurrentDirectory() + "/Keypair_" + DateTime.Now.ToString("yyyyMMddHHmmss") + "/";
|
112
|
+
string pub_file_path = putdir + "public.dat";
|
113
|
+
string pri_file_path = putdir + "private.dat";
|
114
|
+
|
115
|
+
try
|
116
|
+
{
|
117
|
+
string public_key;
|
118
|
+
string private_key;
|
119
|
+
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
|
120
|
+
{
|
121
|
+
public_key = rsa.ToXmlString(false); //falseで公開鍵だけ返却
|
122
|
+
private_key = rsa.ToXmlString(true); //trueで公開、秘密鍵両方を返却
|
123
|
+
}
|
124
|
+
|
125
|
+
//出力フォルダ作成
|
126
|
+
if (!Directory.Exists(putdir))
|
127
|
+
{
|
128
|
+
Directory.CreateDirectory(putdir);
|
129
|
+
}
|
130
|
+
|
131
|
+
//テキスト形式、上書き、UTF-8
|
132
|
+
using (var sw = new StreamWriter(pub_file_path))
|
133
|
+
{
|
134
|
+
sw.Write(Base64Encode(public_key));
|
135
|
+
}
|
136
|
+
using (var sw = new StreamWriter(pri_file_path))
|
137
|
+
{
|
138
|
+
sw.Write(Base64Encode(private_key));
|
139
|
+
}
|
140
|
+
|
141
|
+
|
142
|
+
return putdir;
|
143
|
+
}
|
144
|
+
catch
|
145
|
+
{
|
146
|
+
return null;
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
/// <summary>
|
151
|
+
/// Base64で文字列を難読化する
|
152
|
+
/// </summary>
|
153
|
+
/// <param name="str"></param>
|
154
|
+
/// <returns></returns>
|
155
|
+
/// <remarks>エンコードはutf-8固定</remarks>
|
156
|
+
private static string Base64Encode(string str)
|
157
|
+
{
|
158
|
+
Encoding enc = Encoding.GetEncoding("UTF-8");
|
159
|
+
return Convert.ToBase64String(enc.GetBytes(str));
|
160
|
+
}
|
161
|
+
|
162
|
+
/// <summary>
|
163
|
+
/// Base64で難読化された文字列を復号化する
|
164
|
+
/// </summary>
|
165
|
+
/// <param name="str"></param>
|
166
|
+
/// <returns></returns>
|
167
|
+
/// <remarks>エンコードはutf-8固定</remarks>
|
168
|
+
private static string Base64Decode(string str)
|
169
|
+
{
|
170
|
+
Encoding enc = Encoding.GetEncoding("UTF-8");
|
171
|
+
return enc.GetString(Convert.FromBase64String(str));
|
172
|
+
}
|
173
|
+
|
174
|
+
```
|
175
|
+
|
100
176
|
### 試したこと
|
101
177
|
|
102
178
|
・バイト配列への変換方法を一文字づつに変えた → 変わらず
|
2
radianさんにご指摘いただいた目的を追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
現在、数年来のリハビリがてら、
|
2
2
|
C#のコンソールプログラムでRSAを用いた暗号化プログラムを作っているのですが、公開鍵、秘密鍵を生成し、バイナリファイルで出力しようとしています。
|
3
|
+
成果物としてはRSACryptoServiceProvider.ToXmlStringで出力したstringをテキストエディタで普通に開いただけでは内容が理解できないバイナリファイルにすることをイメージしています。
|
3
4
|
|
4
5
|
暗号化、復号化に関しては正しく動作するプログラムが完成しているのですが、
|
5
6
|
肝心の公開鍵、秘密鍵をC#のBinaryWriterで出力しても、出力したファイルは普通のテキスト形式で、メモ帳で開いても普通に中身が見れてしまいます。
|
1
問題発生箇所にコメントを追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -54,7 +54,7 @@
|
|
54
54
|
// writer.Write(p[i]);
|
55
55
|
//}
|
56
56
|
Console.WriteLine(p[0].ToString()); //正しくバイト型に変換できている
|
57
|
-
writer.Write(p,0,p.Length);
|
57
|
+
writer.Write(p,0,p.Length); //バイナリ形式で出力(※テキストで出力される)
|
58
58
|
}
|
59
59
|
using (var writer = new BinaryWriter(new FileStream(pri_file_path, FileMode.Create)))
|
60
60
|
{
|