Android Java中字符串的SHA1解密

Android Java中字符串的SHA1解密,android,encryption,cryptography,sha1,Android,Encryption,Cryptography,Sha1,我在这里找到了这段代码,使用SHA1加密字符串,它工作得非常好 import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class SHA1Encryption { public static String SHA1(String text) throws NoSuchAl

我在这里找到了这段代码,使用SHA1加密字符串,它工作得非常好

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA1Encryption {

    public static String SHA1(String text) throws NoSuchAlgorithmException,
            UnsupportedEncodingException {
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        md.update(text.getBytes("iso-8859-1"), 0, text.length());
        byte[] sha1hash = md.digest();
        return convertToHex(sha1hash);
    }

    private static String convertToHex(byte[] data) {
        StringBuilder buf = new StringBuilder();
        for (byte b : data) {
            int halfbyte = (b >>> 4) & 0x0F;
            int two_halfs = 0;
            do {
                buf.append((0 <= halfbyte) && (halfbyte <= 9) ? (char) ('0' + halfbyte)
                        : (char) ('a' + (halfbyte - 10)));
                halfbyte = b & 0x0F;
            } while (two_halfs++ < 1);
        }
        return buf.toString();
    }

}
import java.io.UnsupportedEncodingException;
导入java.security.MessageDigest;
导入java.security.NoSuchAlgorithmException;
公共类SHA1加密{
公共静态字符串SHA1(字符串文本)抛出NoSuchAlgorithmException,
不支持的编码异常{
MessageDigest md=MessageDigest.getInstance(“SHA-1”);
md.update(text.getBytes(“iso-8859-1”),0,text.length();
字节[]sha1hash=md.digest();
返回convertToHex(sha1hash);
}
专用静态字符串convertToHex(字节[]数据){
StringBuilder buf=新的StringBuilder();
for(字节b:数据){
int半字节=(b>>>4)&0x0F;
int two_halfs=0;
做{

buf.append((0您不能这样做。SHA1是一种单向散列算法。您无法取回原始内容


如果您想要一个双向加密方案,请尝试使用AES(或RSA,但这可能有点过分)SHA1是一个散列函数,所以你不能解密,因为它没有解密。看看维基百科的加密散列函数,它对什么样的散列函数和常见的加密函数有一些一般性的描述。

你基本上要问的是:“给定一个值y,找到一个x,这样h(x)=y。” 这称为查找预映像。 单向散列函数(其中SHA1是一个例子)的全部要点是,这不可能以比暴力更快的方式实现(平均需要O(2^159)个动作)

进一步阅读:

无法解密安全的单向哈希算法生成的值。哈希与加密不同

您可以做的是迭代所有可能的字符串值,为每个字符串值创建一个哈希值,并比较哈希值。如果找到哈希值,您可以完全确定找到了原始字符串。您找到哈希值为零的两个字符串的几率非常接近于零,您可以安全地假设它不会发生加密安全的散列


可能的字符串数量显然是无限的,因此,如果您对字符串有更多的了解,则只能对所有值进行迭代。例如,如果您有一个4位PIN的散列,您可以使用该知识计算多达10.000个可能的散列值。

猜测输入。这是唯一的方法。(顺便说一句,如果这是一个密码,那么您不应该使用SHA-1,而应该使用bcrypt、scrypt或PBKDF2)