长短信与短信签名

长短信一般是指超过70个汉字的短信内容,由于长短信需要加增加长短信的协议头(6个字节),所以,每条短信就不是70个了,而是67个汉字[即字符长度是134]。6个字节的协力头如: 6位协议头格式:05 00 03 XX MM NN.

C++实现如下:

                               char bHead[20] = {0};
                               sprintf(bHead,"%c%c%c%c%c%c",5,0,3,1,SmsCount,getSmsIndex() +1); 
                               //SmsCount 拆分后短信的数量,getSmsIndex()+1 第几条拆分短信 .
				memcpy(SmsContent,bHead,6);           //SmsContent 加6位字节的头协议的短信内容
				memcpy(SmsContent + 6,content,length);//content 拆分的短信内容
				SmsLenth = length + 6;
				submit->setContent(SmsContent,SmsLenth);


那短信签名跟长短信有啥关系呢? 有这么一条公式来判断:67*N-签名字数-2<=临界区<=67*N [N指长短信拆分成为几条短信]。 如果该条短信在临界区之内,发送的短信内容的最后几位就会被短信签名覆盖,甚至导致短信内容丢失一大半。

我们来讨论数字签名覆盖的问题:假如短信的签名是"大家好love",这就是7个字数,如果发送的短信内容是字数是120,则需要拆分为2条短信,那么短信的临界区是 [125,134] ,所以短信内容发字数为120是没有问题的,如果发送的短信内容是130个字数的,则最后5个字数会被短信签名覆盖。

那如何来避免短信签名覆盖的问题呢? 很简单,发送的短信内容不能在临界区内。一般如果已经在临界区内了,我们不可能减少短信内容,那么可以通过短信内容后面添加相应N个空格之后,短信内容不在临界区内再拆分发送。如上面的要发送130个字数的,我们可以通过在短信内容添加5个空格,变成135个字数后再拆分。其实135个字数拆分的临界区是[192,201],所以135个字数不会在临界区之内。


最后说明一下所谓长短信是指短信的大小超过了单条短信的限制,需将短信拆分成几条短信然后分别发送,接收的时候将几条短信拼在一起组成原始短信的内容,对于拆分后每条短信的长度有一定的限制与单条短信有区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值