前提・実現したいこと
C#アプリでPNG画像を暗号化し、android で復号化後、復号化したPNG画像を表示します。
発生している問題・エラーメッセージ
android javaで、暗号化されたテキストをrawフォルダに入れ、これをmapというファイル名
にします。
下記コードでmapの読み込みを行い、復号化後、Bitmapを作成しますが、Bitmapを作成する関数でnullが返ります
java
1//rawフォルダからmapの読み込み 2InputStream is = null; 3BufferedReader br = null; 4 5StringBuilder sb = new StringBuilder(); 6 7try{ 8 try { 9 Resources res = this.getResources(); 10 is = res.openRawResource(R.raw.map); 11 br = new BufferedReader(new InputStreamReader(is)); 12 String str; 13 14 while((str = br.readLine()) != null){ 15 sb.append(str); 16 } 17 } finally { 18 if (br !=null) br.close(); 19 } 20} catch (IOException ex) { 21 Dialog dialog=new Dialog(this); 22 dialog.setTitle(ex.toString()); 23 dialog.show(); 24} 25 26String angou=sb.toString(); 27Bitmap mapGraphic=null; 28 29//復号化とBitmapの作成 30try { 31 byte[] mapgraphicbyte=decrypt(angou,key);//復号化 これは成功する 32 if (mapgraphicbyte != null) { 33 mapGraphic = BitmapFactory.decodeByteArray(mapgraphicbyte, 0, mapgraphicbyte.length);//ここでnullが返る 34 } 35}catch (Exception ex){ 36 Dialog dialog=new Dialog(this); 37 dialog.setTitle(ex.toString()); 38 dialog.show(); 39}
該当のソースコード
暗号化処理は下記の通りです。
openFileDialog1でファイルを指定し、button1をクリックすると、元ファイルと同じフォルダに、暗号化されたTXTが格納されます。
暗号化は、textBox1に入力された文字列と元ファイルデータの排他的論理和を取ります。
C#
1 2 private void button1_Click(object sender, EventArgs e) 3 { 4 StreamReader sr = new StreamReader( 5 openFileDialog1.FileName, Encoding.UTF8); 6 7 string text = sr.ReadToEnd(); 8 9 sr.Close(); 10 11 text=EncryptString1(text, textBox1.Text); 12 13 14 System.IO.File.WriteAllText(openFileDialog1.FileName+".txt", text); 15 } 16 17 18 19 private String EncryptString1(string text, string key) 20 { 21 22 23 byte[] textbytes = System.Text.Encoding.UTF8.GetBytes(text); 24 byte[] keybytes = System.Text.Encoding.UTF8.GetBytes(key); 25 int keybytesmax = keybytes.Length; 26 27 int counter = 0, keycounter = 0; 28 foreach (byte c2 in textbytes) 29 { 30 textbytes[counter++] =(byte)(c2 ^ keybytes[keycounter]); 31 if (++keycounter >= keybytesmax) keycounter = 0; 32 33 } 34 35 return Convert.ToBase64String(textbytes,Base64FormattingOptions.None); 36 37 } 38 }
復号化は、下記の通りです。
java
1public byte[] decrypt(String encrypt,String key) { 2 3 byte[] textbytes= Base64.decode(encrypt,Base64.NO_WRAP); 4 byte[] keybytes= key.getBytes(); 5 int keybytelen=keybytes.length; 6 int textbytelen=textbytes.length; 7 int counter = 0; 8 int keycounter=0; 9 for(counter=0; counter<textbytelen;counter++) 10 { 11 12 textbytes[counter] = (byte) (textbytes[counter] ^ keybytes[keycounter]); 13 if(++keycounter>=keybytelen)keycounter=0; 14 } 15 return textbytes; 16}
補足情報(FW/ツールのバージョンなど)
android studio 3.0.1を使用
C#アプリ作成にはVisual studio2017 communityを使用
実機検証には,Huawei mate9を使用しています。
宜しくお願い致します
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/07 11:51