C#で暗号化し、android javaで復号化したwavファイルを再生したのですが、妙に音が低くなるという現象が起きており、困っています。
暗号化は下記の通りです。
C#
1//開始ボタン 2 private void button2_Click(object sender, EventArgs e) 3 { 4 FileStream sr = new FileStream( 5 openFileDialog1.FileName, FileMode.Open, FileAccess.Read); 6 byte[] buffer = new byte[sr.Length]; 7 sr.Read(buffer, 0, (int)sr.Length); 8 sr.Close(); 9 10 string text=EncryptString1(buffer, textBox1.Text); 11 12 string filepath = openFileDialog1.FileName; 13 14 //元ファイルと同じフォルダに、拡張子のない、同じ名前で保存 15 string[] split = filepath.Split('.'); 16 System.IO.File.WriteAllText(split[0], text); 17 } 18 19 20 //暗号化処理 21 private String EncryptString1(byte[] textbytes, string key) 22 { 23 byte[] keybytes = System.Text.Encoding.UTF8.GetBytes(key); 24 int keybytesmax = keybytes.Length; 25 26 int counter = 0, keycounter = 0; 27 foreach (byte c2 in textbytes) 28 { 29 textbytes[counter++] =(byte)(c2 ^ keybytes[keycounter]); 30 if (++keycounter >= keybytesmax) keycounter = 0; 31 32 } 33 34 return Convert.ToBase64String(textbytes,Base64FormattingOptions.None); 35 36 }
java側の復号化と音の作成、再生は下記の通りです。
java
1 2public class SozaiHukugouka { 3 4 private Activity Main; 5 private AudioTrack audioTrack; 6 private byte[] koukaon; 7 8 //コンストラクタにてAudioTrackの準備処理 9 public SozaiHukugouka(Activity main) 10 { 11 12 int bufSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT); 13 14 audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_MONO, 15 AudioFormat.ENCODING_PCM_16BIT, bufSize, AudioTrack.MODE_STREAM); 16 17 Main=main; 18 hukugouka(R.raw.decision1,0); 19 20 21 22 } 23 24 //暗号・復号化のキーは自己署名 25 public String Key() 26 { 27 PackageManager pm =Main. getPackageManager(); 28 String key=""; 29 try { 30 PackageInfo packageInfo = pm.getPackageInfo(Main.getPackageName(), 31 PackageManager.GET_SIGNATURES); 32 33 34 for (int i = 0; i < packageInfo.signatures.length; i++) { 35 36 Signature signature = packageInfo.signatures[i]; 37 key=signature.toCharsString(); 38 } 39 40 }catch (Exception ex) 41 { 42 43 44 } 45 return key; 46 } 47 48 //復号化処理 49 private void hukugouka(int id,int num) 50 { 51 52 InputStream is = null; 53 BufferedReader br = null; 54 55 StringBuilder sb = new StringBuilder(); 56 57 58 try{ 59 try { 60 Resources res = Main.getResources(); 61 62 //C#で作った拡張子のないファイルを、rawフォルダに入れ、そこで振られたidを指定し、開く 63 is = res.openRawResource(id); 64 65 br = new BufferedReader(new InputStreamReader(is)); 66 String str; 67 68 while((str = br.readLine()) != null){ 69 sb.append(str); 70 } 71 } finally { 72 if (br !=null) br.close(); 73 } 74 } catch (IOException e) { 75 Toast.makeText(Main, "読み込み失敗", Toast.LENGTH_SHORT).show(); 76 } 77 78 79 String angou=sb.toString(); 80 81 try { 82 koukaon=decrypt(angou,Key()); 83 84 } 85 catch (Exception ex) 86 { 87 88 } 89 90 } 91 92//再生 93 public void PlaySound(int koukaonNo) 94 { 95 96 // 再生 97 audioTrack.play(); 98 audioTrack.write(koukaon_flick, 46, koukaon.length-46); 99 100 } 101 102 //復号化 103 public byte[] decrypt(String encrypt,String key) { 104 105 byte[] textbytes= Base64.decode(encrypt,Base64.NO_WRAP); 106 byte[] keybytes=null; 107 108 int textbytelen=textbytes.length; 109 110 111 try{ 112 keybytes= key.getBytes("UTF-8"); 113 114 } 115 catch (Exception ex) 116 { 117 Dialog dialog=new Dialog(Main); 118 dialog.setTitle(ex.toString()); 119 dialog.show(); 120 } 121 int keybytelen=keybytes.length; 122 123 int counter = 0; 124 125 126 int keycounter=0; 127 128 for(counter=0; counter<textbytelen;counter++) 129 { 130 textbytes[counter] = (byte) (textbytes[counter] ^ keybytes[keycounter]); 131 if(++keycounter>=keybytelen)keycounter=0; 132 } 133 return textbytes; 134 } 135} 136
どうすれば、復号化した上で正しい音が出せますか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/24 03:38
2018/06/24 03:57
2018/06/24 04:11
2018/06/24 04:42
2018/06/24 04:56