package com.ptn.agent.mac;
import org.junit.Test;
import com.dmt.security.CharacterUtil;
public class SHA {
/**@author Jack.Xu
* Note:SHA-1 算法运
*行后,取输出的最低 24 个比特作为 PUIMID 的低 24 比特,然后在前面加上 8
*个比特的固定前缀(16 进制数‘0x80’),即得到PUIMID 值
*结果为:80386BF0
*/
@Test
public static String getUimid(String iccid)
{
String uimid = null;
try {
// String myinfo="8901010123456789014F";
byte[] testData = BCD7.str2Bcd(iccid);
System.out.println(testData.length);
//java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5");
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(CharacterUtil.hexToBytes(iccid));
byte[] digesta=alga.digest();
// System.out.println(Integer.valueOf(CharacterUtil.byteToHex(digesta), 2));
uimid =byte2hex(digesta).substring(34, 40);
System.out.println("本信息摘要是:"+byte2hex(digesta).substring(34, 40));
//通过某中方式传给其他人你的信息(myinfo)和摘要(digesta) 对方可以判断是否更改或传输正常
java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");
algb.update(iccid.getBytes());
if (algb.isEqual(digesta,algb.digest())) {
System.out.println("信息检查正常");
}
else
{
System.out.println("摘要不相同");
}
}
catch (java.security.NoSuchAlgorithmException ex) {
System.out.println("非法摘要算法");
}
return uimid;
}
public static String byte2hex(byte[] b) //二行制转字符串
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+"";
}
return hs.toUpperCase();
}
public static void main(String[] args) {
System.out.println(SHA.getUimid("89860307805910000028"));
}
}