我想在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) 我正在使用Jasypt进行加密.这是我的代码:
public class Encryptor {
private final static StandardPBEStringEncryptor pbeEncryptor = new StandardPBEStringEncryptor();
private final static String PASSWORD = "FBL";
private final static String ALGORITHM = "PBEWithMD5AndTripleDES";
static{
pbeEncryptor.setPassword( PASSWORD );
//pbeEncryptor.setAlgorithm( ALGORITHM );
}
public static String getEncryptedValue( String text ){
return pbeEncryptor.encrypt( text );
}
public static String getDecryptedValue( String text ){
return pbeEncryptor.decrypt( text );
}
}
Run Code Online (Sandbox Code Playgroud)
取消注释该setAlgorithm行,它将引发异常
org.jasypt.exceptions.EncryptionOperationNotPossibleException:加密引发了异常.可能的原因是您使用的是强加密算法,并且尚未在此Java虚拟机中安装Java Cryptography Ex tension(JCE)Unlimited Strength Jurisdiction Policy Files
api说:
设置用于加密的算法设置用于加密的算法,如PBEWithMD5AndDES.
JCE提供程序必须支持此算法(如果不指定,则为默认JVM提供程序),如果支持,则还可以为其指定模式和填充,如ALGORITHM/MODE/PADDING .
参考:http://www.jasypt.org/api/jasypt/apidocs/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html#setAlgorithm%28java.lang.String%29 …
鉴于我想支持所有的设备,比如Froyo或更高版本,我可以使用哪种最安全的签名算法?我不需要将我的APK放在Android Market中.
我知道,例如,有些手机支持sha1withrsa但不支持sha256withrsa(Link).
我需要使用 React Native 计算 Android 和 iOS 中许多文件的 SHA256 哈希值。当用户选择文件时,我的应用程序将开始计算每个文件的 SHA256。
对于网页,我一直使用 crypto-js。但对于 Andoid 和 iOS 应用程序,我担心 crypto-js 的性能可能不够快,因为文件(例如视频文件)可能 >400 MB。
有什么方法可以调用 Android/iOS 原生 api 来计算 SHA256,而不是为了性能而使用 crypto-js 吗?
sha ×3
android ×2
java ×2
cryptojs ×1
digest ×1
encryption ×1
jasypt ×1
jvm ×1
php ×1
react-native ×1