发布于2023-01-30 23:25 阅读(1182) 评论(0) 点赞(13) 收藏(2)
我正在做一个项目,我需要按照下面显示的步骤创建一个 SHA256 哈希,并将其与现有哈希进行比较以进行验证。
下面提到的是创建哈希的步骤:
Hashing logic for Mobile Number :
Sha256(Sha256(Mobile+SharePhrase))*number of times last digit of Aadhaar number
(Ref ID field contains last 4 digits).
Example :
Mobile: 1234567890
Aadhaar Number:XXXX XXXX 3632
Passcode : Lock@487
Hash: Sha256(Sha256(1234567890Lock@487))*2
我这样做
byte[] digCloneOutput = new byte[32];
private void getPhoneHash(String numberToHash) {
String phn = (getPhn+""+ed_shareCode.getText().toString().trim());
Log.e("phn", phn);
MessageDigest md = null;
byte[] digest;
byte[] digClone = new byte[0];
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
digest = phn.getBytes(Charset.forName("UTF-8"));
digClone = digest.clone();
}
try
{
md = MessageDigest.getInstance("SHA-256");
}
catch (NoSuchAlgorithmException e)
{
throw new IllegalStateException("SHA-256 hash should be available", e);
}
for(int i = 0; i< 2; i++){
md.update(digClone);
digClone = md.digest();
Log.e("Intermediate hash",""+ digClone);
}
for (int i = 0; i < digClone.length; i++)
{
digCloneOutput[i] = (byte) (digClone[i]*lastDigAdhr);
// md.update(digClone);
// printDigest("Intermediate hash", digClone);
}
printDigest( digCloneOutput);
}
public void printDigest(byte[] digest)
{
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
String hex = Integer.toHexString(0xff & digest[i]);
if(hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
Log.e("Final HashString to compare", String.valueOf(hexString));
}
我必须比较的最终哈希看起来像这样
6d0af38001b278389875d2119a187ac5d4df16f5dd75fa5272499059c1149803
但是我的逻辑创建的散列与原始散列不匹配。
从最近两天开始,我一直在为此苦苦挣扎。任何帮助将不胜感激。提前致谢
抱歉回复晚了。我假设您已经解决了您的问题。希望这个答案可以帮助任何仍在寻找答案的人。
Aadhar 网站的文档非常模糊,这使得开发变得更加困难。我们中的大多数人在看到声明时都会感到困惑:(Sha256(Sha256(Mobile+SharePhrase))*number of times last digit of Aadhaar number
至少我感到困惑)。所以我不得不使用试错法来验证哈希,结果是简单的逻辑。您需要做的就是将手机与 Zip 密码连接起来,并对结果字符串进行哈希处理 aadhaar 号最后一位数字的次数。您可以使用以下代码:
private boolean isHashMatched(String mobileNo, String zipPassword, String
hashedMobile ,int aadharLastDigit){
String concatedString = mobileNo + zipPassword;
aadharLastDigit = aadharLastDigit == 0 ? 1 : aadharLastDigit; //if last
//digit is "0", hash only one time.
try {
for(int i = 0; i < aadharLastDigit; i++){
concatedString = DigestUtils.sha256Hex(concatedString);
}
return hashedMobile.equals(concatedString);
}catch (Exception e){
e.printStackTrace();
return false;
}
}
使用 Apache Commons-Codec 进行哈希处理(implementation 'commons-codec:commons-codec:1.14'
)。
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/635830/a7df658938bd80896ca9/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!