SIPC的认证算法java如何实现?
关注:40952 答案:1 悬赏:0
离问题结束还有
最佳答案
暂无最佳答案 我来回答
全部回答
SIPC的认证算法,支持SHA1和MD5。
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Random;
public class GenAuthResponse {
// Fields
private String cnonce;
private String domain;
private String nonce;
private String password;
private static Random random;
private String sid;
private boolean usingSHA1=false;
private String salt;
private String encryptPassword;
public void setSalt(String salt) {
this.salt = salt;
}
public String getEncryptPassword() {
return encryptPassword;
}
public void setEncryptPassword(String encryptPassword) {
this.encryptPassword = encryptPassword;
}
public String getSalt() {
return salt;
}
// public void setSalt(String salt) {
// this.salt = salt;
// }
public boolean isUsingSHA1() {
return usingSHA1;
}
public void setUsingSHA1(boolean usingSHA1) {
this.usingSHA1 = usingSHA1;
}
public String getCnonce() {
return this.cnonce;
}
public void setCnonce(String cnonce) {
this.cnonce = cnonce;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public String getNonce() {
return nonce;
}
public void setNonce(String nonce) {
this.nonce = nonce;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
// Methods
public GenAuthResponse(String sid, String password, String domain, String nonce)
{
this.sid = sid;
this.password = password;
this.domain = domain;
this.nonce = nonce;
Calendar cal = new GregorianCalendar();
int seed = cal.get(Calendar.DAY_OF_YEAR) * 0xf4240;
seed += cal.get(Calendar.HOUR) * 0x2710;
seed += cal.get(Calendar.MINUTE) * 100;
seed += cal.get(Calendar.SECOND);
// random = new Random(System.currentTimeMillis());
random = new Random(seed);
this.cnonce = GenCNonce();
this.salt=GenSalt();
// System.out.println(salt);
}
private static String BinToHex(byte[] binary)
{
// StringBuilder builder = new StringBuilder();
// for(byte num : binary)
// {
// int n = num;
// if (n 15)
// {
// builder.append(String.format("%X",n));
//
// }
// else
// {
// builder.append(String.format("0%X",n));
//
// }
// }
//// System.out.println(builder.toString());
// return builder.toString();
if (binary == null)
return "null";
if (binary.length == 0)
return "";
StringBuilder buf = new StringBuilder();
for (int i = 0; i < binary.length; i++) {
if (binary[i] < 0)
buf.append(Integer.toHexString(binary[i]&0xff));
else if (binary[i] < 16) {
buf.append('0');
buf.append(Integer.toHexString(binary[i]));
} else {
buf.append(Integer.toHexString(binary[i]));
}
}
return buf.toString().toUpperCase();
}