最近要用java实现cmpp3.0协议的sp端代码,关于AuthenticatorSource字段java实现的文章不多见,大多数都是c或c++的代码,以下是其java实现,希望能给后继开发者带来帮助。
private
static
byte
[] getAuthenticatorSource(String Source_Addr,
String Shared_Secret, String Timestamp) throws Exception{
byte [] b09 = { 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 };
MessageDigest mdTemp = MessageDigest.getInstance( " MD5 " );
mdTemp.update(Source_Addr.getBytes());
mdTemp.update(b09);
mdTemp.update(Shared_Secret.getBytes());
mdTemp.update(Timestamp.getBytes());
return mdTemp.digest();
}
String Shared_Secret, String Timestamp) throws Exception{
byte [] b09 = { 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 };
MessageDigest mdTemp = MessageDigest.getInstance( " MD5 " );
mdTemp.update(Source_Addr.getBytes());
mdTemp.update(b09);
mdTemp.update(Shared_Secret.getBytes());
mdTemp.update(Timestamp.getBytes());
return mdTemp.digest();
}
涵数返回16字节的字节数组,在构造socket输出流数组时,直接把该16字节数组放入输出流数组的相应位置即可。其中特别注意的是String Timestamp参数是dateFormat = new SimpleDateFormat("MMddHHmmss")的字符串形式。