質問編集履歴
3
ご指摘頂いた点から修正したコードを追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -196,6 +196,158 @@
|
|
196
196
|
|
197
197
|
|
198
198
|
|
199
|
+
###指摘後修正(ベストアンサー後)
|
200
|
+
|
201
|
+
※今回の問題はそもそも自身のイメージしているバイナリファイルの概念が間違っているのが原因でした。
|
202
|
+
|
203
|
+
そのため、異常して上げた箇所の動作はそもそもが正常な動作であり、それを間違った解釈から異常と判断していたのが問題でした。
|
204
|
+
|
205
|
+
```C#
|
206
|
+
|
207
|
+
/// <summary>
|
208
|
+
|
209
|
+
/// 公開鍵、秘密鍵のペアを作成してファイル出力する
|
210
|
+
|
211
|
+
/// </summary>
|
212
|
+
|
213
|
+
/// <returns>作成した鍵のファイルを格納したフォルダパス。失敗時はNull</returns>
|
214
|
+
|
215
|
+
public static string PutRSAKey()
|
216
|
+
|
217
|
+
{
|
218
|
+
|
219
|
+
|
220
|
+
|
221
|
+
string putdir = Directory.GetCurrentDirectory() + "/Keypair_" + DateTime.Now.ToString("yyyyMMddHHmmss") + "/";
|
222
|
+
|
223
|
+
string pub_file_path = putdir + "public.dat";
|
224
|
+
|
225
|
+
string pri_file_path = putdir + "private.dat";
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
try
|
230
|
+
|
231
|
+
{
|
232
|
+
|
233
|
+
string public_key;
|
234
|
+
|
235
|
+
string private_key;
|
236
|
+
|
237
|
+
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
|
238
|
+
|
239
|
+
{
|
240
|
+
|
241
|
+
public_key = rsa.ToXmlString(false); //falseで公開鍵だけ返却
|
242
|
+
|
243
|
+
private_key = rsa.ToXmlString(true); //trueで公開、秘密鍵両方を返却
|
244
|
+
|
245
|
+
}
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
//出力フォルダ作成
|
250
|
+
|
251
|
+
if (!Directory.Exists(putdir))
|
252
|
+
|
253
|
+
{
|
254
|
+
|
255
|
+
Directory.CreateDirectory(putdir);
|
256
|
+
|
257
|
+
}
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
//テキスト形式、上書き、UTF-8
|
262
|
+
|
263
|
+
using (var sw = new StreamWriter(pub_file_path))
|
264
|
+
|
265
|
+
{
|
266
|
+
|
267
|
+
sw.Write(Base64Encode(public_key));
|
268
|
+
|
269
|
+
}
|
270
|
+
|
271
|
+
using (var sw = new StreamWriter(pri_file_path))
|
272
|
+
|
273
|
+
{
|
274
|
+
|
275
|
+
sw.Write(Base64Encode(private_key));
|
276
|
+
|
277
|
+
}
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
|
282
|
+
|
283
|
+
return putdir;
|
284
|
+
|
285
|
+
}
|
286
|
+
|
287
|
+
catch
|
288
|
+
|
289
|
+
{
|
290
|
+
|
291
|
+
return null;
|
292
|
+
|
293
|
+
}
|
294
|
+
|
295
|
+
}
|
296
|
+
|
297
|
+
|
298
|
+
|
299
|
+
/// <summary>
|
300
|
+
|
301
|
+
/// Base64で文字列を難読化する
|
302
|
+
|
303
|
+
/// </summary>
|
304
|
+
|
305
|
+
/// <param name="str"></param>
|
306
|
+
|
307
|
+
/// <returns></returns>
|
308
|
+
|
309
|
+
/// <remarks>エンコードはutf-8固定</remarks>
|
310
|
+
|
311
|
+
private static string Base64Encode(string str)
|
312
|
+
|
313
|
+
{
|
314
|
+
|
315
|
+
Encoding enc = Encoding.GetEncoding("UTF-8");
|
316
|
+
|
317
|
+
return Convert.ToBase64String(enc.GetBytes(str));
|
318
|
+
|
319
|
+
}
|
320
|
+
|
321
|
+
|
322
|
+
|
323
|
+
/// <summary>
|
324
|
+
|
325
|
+
/// Base64で難読化された文字列を復号化する
|
326
|
+
|
327
|
+
/// </summary>
|
328
|
+
|
329
|
+
/// <param name="str"></param>
|
330
|
+
|
331
|
+
/// <returns></returns>
|
332
|
+
|
333
|
+
/// <remarks>エンコードはutf-8固定</remarks>
|
334
|
+
|
335
|
+
private static string Base64Decode(string str)
|
336
|
+
|
337
|
+
{
|
338
|
+
|
339
|
+
Encoding enc = Encoding.GetEncoding("UTF-8");
|
340
|
+
|
341
|
+
return enc.GetString(Convert.FromBase64String(str));
|
342
|
+
|
343
|
+
}
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
```
|
348
|
+
|
349
|
+
|
350
|
+
|
199
351
|
### 試したこと
|
200
352
|
|
201
353
|
|
2
radianさんにご指摘いただいた目的を追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
C#のコンソールプログラムでRSAを用いた暗号化プログラムを作っているのですが、公開鍵、秘密鍵を生成し、バイナリファイルで出力しようとしています。
|
4
4
|
|
5
|
+
成果物としてはRSACryptoServiceProvider.ToXmlStringで出力したstringをテキストエディタで普通に開いただけでは内容が理解できないバイナリファイルにすることをイメージしています。
|
6
|
+
|
5
7
|
|
6
8
|
|
7
9
|
暗号化、復号化に関しては正しく動作するプログラムが完成しているのですが、
|
1
問題発生箇所にコメントを追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -110,7 +110,7 @@
|
|
110
110
|
|
111
111
|
Console.WriteLine(p[0].ToString()); //正しくバイト型に変換できている
|
112
112
|
|
113
|
-
writer.Write(p,0,p.Length);
|
113
|
+
writer.Write(p,0,p.Length); //バイナリ形式で出力(※テキストで出力される)
|
114
114
|
|
115
115
|
}
|
116
116
|
|