我正在开发一个加密的短信应用程序,我正在加密到3DES的短信我试图使用SmsManager.sendDataMessage将字节数组结果发送到另一部手机,但我无法在接收器中读取正确的字节数组电话,例如:
我的应用发送数组:
[0,1,2,3,4,5,6,7,-100,-101,-105,-110]
而在另一部手机中,我只收到(如果幸运的话)
[0,1,2,3,4]
我尝试使用多种编码发送文本,但它无效。
我在模拟器和设备上试过它,行为是一样的。
我尝试从可打印字符(字母,数字)发送字节,它完美无缺,所以我 认为问题是非打印字节,但我需要通过sms发送字节....一个朋友做了类似的东西,但使用黑莓,它工作正常。
我做错了什么?
这是发送代码:
SmsManager manager = SmsManager.getDefault();
byte[] arrBytes = new byte[]{0,1,2,3,4,5,6,7,-100,-101,-105,-110};
manager.sendDataMessage(number, null, (short)0, arrBytes, null, null);
这是接收代码:
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
Bundle bundle = intent.getExtras();
SmsMessage[] smsMensajes = null;
if(bundle != null){
try{
Object[] pdus = (Object[]) bundle.get("pdus");
smsMensajes = new SmsMessage[pdus.length];
byte[] msjByte = new byte[100];
for(int i=0; i < smsMensajes.length; i++){
smsMensajes[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
msjByte = smsMensajes[i].getUserData();
}
}
catch(Exception e){
Log.e("Recibiendo SMS", e.toString());
}
}
}
}
提前致谢:)
答案 0 :(得分:2)
如果您从根本上尝试通过基于文本的界面发送任意字节,最安全的方法是使用base-64。 Android中有一个Base64
类,这非常容易。
不可否认,这意味着大小有点膨胀,所以在140个字符中你只能传输105个字节,但至少它是安全的,应该与任何设备和API一起使用。
答案 1 :(得分:-1)
确保在关闭流之前刷新流。看起来你不是在使用溪流。然后我猜一些长度的参数是错误的。
如果您正在加密,那么为什么不发送加密字符串?无需尝试字节。请查看以下代码段:http://www.androidsnippets.com/encryptdecrypt-strings
出于好奇:你如何在两端管理加密/解密的密钥?