Android开发中我们经常会用到各种加密,一般针对一些密码加密,下面给说一下RSA加密与SHA256算法的使用方法:
附加RSA加密jar包:点击打开链接
public class RsaHelper {
/**
*
* rsa加密
* @param s
* @param publicKey
* @return
* @throws InvalidCipherTextException
* @throws IOException
*/
public static String encrypt(String s, String publicKey) throws InvalidCipherTextException, IOException {
AsymmetricBlockCipher engine = new PKCS1Encoding(new RSAEngine());
AsymmetricKeyParameter parameters = GetPublicKeyParameter(publicKey);
engine.init(true, parameters);
byte[] byteData = s.getBytes();
byte[] ResultData = engine.processBlock(byteData, 0, byteData.length);
return Base64.encodeToString((ResultData), Base64.NO_WRAP);
}
/**
*
* rsa解密
* @param s
* @param privateKey
* @return
* @throws InvalidCipherTextException
* @throws IOException
*/
public static String decrypt(String s, String privateKey) throws InvalidCipherTextException, IOException {
AsymmetricBlockCipher engine = new PKCS1Encoding(new RSAEngine());
AsymmetricKeyParameter parameters = GetPrivateKeyParameter(privateKey);
engine.init(false, parameters);
byte[] byteData = Base64.decode(s,Base64.NO_WRAP);
byte[] ResultData = engine.processBlock(byteData, 0, byteData.length);
return new String(ResultData);
}
private static AsymmetricKeyParameter GetPrivateKeyParameter(String key) throws IOException {
String keypriv = key.replace("\r", "").replace("\n", "").replace(" ", "");
byte[] privateInfoByte = Base64.decode(keypriv,Base64.NO_WRAP);
AsymmetricKeyParameter priKey = PrivateKeyFactory.createKey(privateInfoByte);
return priKey;
}
private static AsymmetricKeyParameter GetPublicKeyParameter(String key) throws IOException {
String keypub = key.replace("\r", "").replace("\n", "").replace(" ", "");
byte[] publicInfoByte = Base64.decode(keypub,Base64.NO_WRAP);
AsymmetricKeyParameter pubKey = PublicKeyFactory.createKey(publicInfoByte);
return pubKey;
}
/**
* SHA256加密
* @param content
* @param secret
* @return
*/
public static String encrytSHA256(String content, String secret) {
try {
Security.addProvider(new BouncyCastleProvider());
SecretKey secretKey = new SecretKeySpec(secret.getBytes(),
"HmacSHA256");
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
byte[] digest = mac.doFinal(content.getBytes());
String sig = Base64.encodeToString((digest), Base64.NO_WRAP);
return sig;
} catch (Exception e) {
throw new RuntimeCryptoException("加密异常");
}
}
}