我想在Android中获取字符串的SHA256.
这是我要匹配的PHP代码:
echo bin2hex(mhash(MHASH_SHA256,"asdf"));
//outputs "f0e4c2f76c58916ec258f246851bea091d14d4247a2fc3e18694461b1816e13b"
Run Code Online (Sandbox Code Playgroud)
现在,在Java中,我正在尝试执行以下操作:
String password="asdf"
MessageDigest digest=null;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
digest.reset();
try {
Log.i("Eamorr",digest.digest(password.getBytes("UTF-8")).toString());
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但这打印出来:"a42yzk3axdv3k4yh98g8"
我在这做错了什么?
解决方案感谢erickson:
Log.i("Eamorr",bin2hex(getHash("asdf")));
public byte[] getHash(String password) {
MessageDigest digest=null;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
digest.reset();
return digest.digest(password.getBytes());
}
static String bin2hex(byte[] data) …Run Code Online (Sandbox Code Playgroud) 当我从另一个分支机构挑选一个提交时,我发现自己做了很多.
$ git log -1 another_branch
commit <commit_sha>
// copy <commit_sha>
$ git cherry-pick <commit_sha>
Run Code Online (Sandbox Code Playgroud)
我可以在一个命令中完成所有这些操作,如果是这样,它是什么?
SHA1和RSA有什么区别?它们只是不同的算法,还是它们在某种程度上从根本上(即用于不同的事物)不同.
是否可以在PostgreSQL中创建用户而不提供纯文本密码(理想情况下,我希望能够创建一个只提供用sha-256加密的密码的用户)?
我想做的是创建一个类似的用户:
CREATE USER "martin" WITH PASSWORD '$6$kH3l2bj8iT$KKrTAKDF4OoE7w.oy(...)BPwcTBN/V42hqE.';
Run Code Online (Sandbox Code Playgroud)
有办法做到这一点吗?
谢谢您的帮助.
我一直在查看hashlib文档但是在散列数据时没有找到任何关于使用salt的内容.
帮助会很棒.
我试图在android中生成SHA256哈希,然后我传递给ASP.NET Web API Web服务并在那里比较哈希.因此,我需要在Android中构造一个哈希,给定ASP.NET中相同的输入将生成一个等效的哈希.我拉着我的头发试图找出我做错了什么.
这是Android代码:
public String computeHash(String input) throws NoSuchAlgorithmException{
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.reset();
try{
digest.update(input.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e){
e.printStackTrace();
}
byte[] byteData = digest.digest(input.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++){
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
以及这里的服务器代码(c#):
private static string ComputeHash(string input, HashAlgorithm algorithm)
{
Byte[] inputBytes = Encoding.UTF8.GetBytes(input);
Byte[] hashedBytes = algorithm.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i …Run Code Online (Sandbox Code Playgroud) 所以阅读这篇文章:如何在Android中计算字符串的SHA-256哈希值?
和文档:http://developer.android.com/reference/java/security/MessageDigest.html
我很好奇; 哪些手机支持SHA-256?在文档中,关于'NoSuchAlgorithmException'的一行让我觉得有些手机不支持所有算法.在我为一个应用程序实现这个并期望它在所有手机上工作之前我想知道如果有人知道这个...?
我觉得奇怪的是MessageDigest类没有一些常量来选择你想要使用的算法.
MD5和SHA只包含字母数字字符吗?(即,从A到Z和0到9,还是它们排除了一些字符?)
在纯Java6中为非常大的文件创建SHA-1的最佳方法是什么?如何实现此方法:
public abstract String createSha1(java.io.File file);
Run Code Online (Sandbox Code Playgroud) 为什么即使我在运行后没有对提交(消息,文件)进行任何更改,我最新提交的SHA-1哈希值也会发生变化git commit --amend?
假设我在命令行运行以下命令.
cd ~/Desktop
mkdir test_amend
cd test_amend
git init
echo 'foo' > test.txt
git add test.txt
git commit -m 'initial commit'
Run Code Online (Sandbox Code Playgroud)
然后,调用
git log --pretty=oneline --abbrev-commit
Run Code Online (Sandbox Code Playgroud)
打印以下消息:
b96a901 initial commit
Run Code Online (Sandbox Code Playgroud)
然后我做
git commit --amend
Run Code Online (Sandbox Code Playgroud)
但我改变主意,决定不改变最后一次提交中的任何内容.换句话说,我保持最后一次提交的文件,目录和消息不变(我只保存消息文件并关闭我的编辑器).
然后,我做
git log --pretty=oneline --abbrev-commit
Run Code Online (Sandbox Code Playgroud)
再一次,我看到提交的哈希值发生了变化:
3ce92dc initial commit
Run Code Online (Sandbox Code Playgroud)
是什么导致哈希改变?是否与提交的时间戳有关?
sha ×10
android ×3
cryptography ×3
git ×2
hash ×2
java ×2
asp.net ×1
digest ×1
encryption ×1
git-amend ×1
git-branch ×1
hashlib ×1
md5 ×1
passwords ×1
php ×1
plaintext ×1
postgresql ×1
python ×1
rsa ×1
salt ×1
saltedhash ×1
security ×1