質問編集履歴

3

ご指摘頂いた点から修正したコードを追記

2020/12/14 05:23

投稿

tomy-c
tomy-c

スコア179

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さんにご指摘いただいた目的を追記

2020/12/14 05:23

投稿

tomy-c
tomy-c

スコア179

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

問題発生箇所にコメントを追加

2020/12/14 01:44

投稿

tomy-c
tomy-c

スコア179

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