我正在制作 Android 的程序,该程序与IMS有关。 我希望服务器将一个随机数发送回客户端作为字符串并在客户端打印。 为了生成 nonce ,我尝试使用此网站的代码。
http://www.exampledepot.com/egs/java.security/CreateSecureRandom.html
我的部分代码如下
public static String generateNonce() {
try {
// Create a secure random number generator
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
// Get 1024 random bits
byte[] bytes = new byte[1024/8];
sr.nextBytes(bytes);
// Create two secure number generators with the same seed
int seedByteCount = 10;
byte[] seed = sr.generateSeed(seedByteCount);
sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
SecureRandom sr2 = SecureRandom.getInstance("SHA1PRNG");
sr2.setSeed(seed);
} catch (NoSuchAlgorithmException e) {
}
//return NONCE;
return null;
}
我在开始时宣布NONCE = generateNonce();
。
但问题不是获得一个nonce值,而是在客户端打印为 null 。当我尝试在服务器端打印时,它也显示为 null 。
有人可以告诉我代码中的错误或者帮助我提供更好或更合适的编码。非常感谢。
此致 Sebby。
答案 0 :(得分:7)
您需要将return
语句添加到您想要返回的值,截至目前您的代码生成(或似乎生成)NONCE但您返回{{ 1}}所以字符串null
的值为NONCE
。
您还应该删除null
声明。如果您保留它并且它是 last return语句,您的代码将生成有效的NONCE 但将返回return null
。
答案 1 :(得分:2)
好吧,我首先要解释你的代码格式,因为它非常难以理解。
然后我将删除第二个SecureRandom实例。
然后我会在最后删除return null;
语句。
然后我会重写函数以返回一个像这样的随机整数:
return sr.next(32);
还要确保声明函数返回整数而不是字符串。