大家好,又见面了,我是你们的朋友全栈君。
Android中常用的加密方式
HmacSHA1
public static String getSignUtil(String key ,String base) {
Log.i(TAG, "getSignUtil: GET SIGN");
String type = "HmacSHA1";
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), type);
Mac mac = null;
try {
mac = Mac.getInstance(type);
mac.init(secret);
byte[] digest = mac.doFinal(base.getBytes());
Log.i(TAG, "authorization: " + Base64.encodeToString(digest, Base64.DEFAULT));
return Base64.encodeToString(digest, Base64.DEFAULT);
} catch (Exception e) {
Log.e(TAG, "getSignUtil: " + e.toString());
}
return type;
}
MD5 and RSA
public class DigestUtils {
public static String TAG = “DigestUtils”;
private static final char[] hexCode = “0123456789ABCDEF”.toCharArray();
public static String md5(String input) {
byte[] bytes = new byte[0];
try {
bytes = MessageDigest.getInstance("MD5").digest(input.getBytes());
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, "md5: " + e.toString());
}
return printHexBinary(bytes);
}
public static String printHexBinary(byte[] data) {
StringBuilder r = new StringBuilder(data.length * 2);
for (byte b : data) {
r.append(hexCode[(b >> 4) & 0xF]);
r.append(hexCode[(b & 0xF)]);
}
return r.toString();
}
/**
* RSA私钥解密
*
* @param message 加密字符串
* @param privateKey 私钥
* @return铭文
*/
public static String decrypt(String message, String privateKey) {
try {
if (message.contains(" ")) {
message = message.replaceAll(" " , "+");
}
//base64编码的私钥
final byte[] decoded = Base64.decode(privateKey, Base64.DEFAULT);
//final byte[] inputByte = Base64.decodeBase64(message.getBytes(StandardCharsets.UTF_8))
//decodeBase64(privateKey);
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, priKey);
//64位解码加密后的字符串
final byte[] inputByte = Base64.decode(message.getBytes(StandardCharsets.UTF_8), Base64.DEFAULT);
// decodeBase64(message.getBytes(StandardCharsets.UTF_8));
//密文
final int len = inputByte.length;
//偏移量
int offset = 0;
//段数
int i = 0;
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
while (len - offset > 0) {
byte[] cache;
if
(len - offset > 128) {
cache = cipher.doFinal(inputByte, offset, 128);
} else {
cache = cipher.doFinal(inputByte, offset, len - offset);
}
bos.write(cache);
i++;
offset = 128 * i;
}
bos.close();
return new String(bos.toByteArray(), StandardCharsets.UTF_8);
} catch (InvalidKeyException | InvalidKeySpecException | NoSuchAlgorithmException | NoSuchPaddingException
| IllegalBlockSizeException | BadPaddingException | IOException e) {
Log.e(TAG, String.format("decrypt: 数据解密异常 , 原始数据: %s,密钥: %s,e: %s " , message, privateKey, e));
}
return null;
}
/**
* RSA私钥解密
*
* @param message 加密字符串
* @param privateKey 私钥
* @return 铭文
*/
public static String decrypt2(String message, String privateKey) {
try {
if (message.contains(" ")) {
message = message.replaceAll(" ", "+");
}
//base64编码的私钥
final byte[] decoded = Base64.decode(privateKey.getBytes(StandardCharsets.UTF_8),0);
// final byte[] decoded = Base64Utils.decode(privateKey);
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, priKey);
//64位解码加密后的字符串
final byte[] inputByte = Base64.decode(message.getBytes(StandardCharsets.UTF_8),0);
//密文
final int len = inputByte.length;
//偏移量
int offset = 0;
//段数
int i = 0;
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
while (len - offset > 0) {
byte[] cache;
if (len - offset > 128) {
cache = cipher.doFinal(inputByte, offset, 128);
} else {
cache = cipher.doFinal(inputByte, offset, len - offset);
}
bos.write(cache);
i++;
offset = 128 * i;
}
bos.close();
return new String(bos.toByteArray(),StandardCharsets.UTF_8);
} catch (InvalidKeyException | InvalidKeySpecException | NoSuchAlgorithmException
| NoSuchPaddingException | IllegalBlockSizeException | BadPaddingException | IOException e) {
Log.e(TAG, String.format("decrypt: 数据解密异常 , 原始数据: %s,密钥: %s,e: %s " , message, privateKey, e));
}
return null;
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145921.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...