日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android底层rsa加密,android 下RSA加密解密

發布時間:2024/4/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android底层rsa加密,android 下RSA加密解密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考文章

Base64.java需要換成下面這個類

package club.hb168.hmi.util.rsa;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.OutputStream;

public class Base64 {

private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

.toCharArray();

public static String encode(byte[] data) {

int start = 0;

int len = data.length;

StringBuffer buf = new StringBuffer(data.length * 3 / 2);

int end = len - 3;

int i = start;

int n = 0;

while (i <= end) {

int d = ((((int) data[i]) & 0x0ff) << 16)

| ((((int) data[i + 1]) & 0x0ff) << 8)

| (((int) data[i + 2]) & 0x0ff);

buf.append(legalChars[(d >> 18) & 63]);

buf.append(legalChars[(d >> 12) & 63]);

buf.append(legalChars[(d >> 6) & 63]);

buf.append(legalChars[d & 63]);

i += 3;

if (n++ >= 14) {

n = 0;

buf.append(" ");

}

}

if (i == start + len - 2) {

int d = ((((int) data[i]) & 0x0ff) << 16)

| ((((int) data[i + 1]) & 255) << 8);

buf.append(legalChars[(d >> 18) & 63]);

buf.append(legalChars[(d >> 12) & 63]);

buf.append(legalChars[(d >> 6) & 63]);

buf.append("=");

} else if (i == start + len - 1) {

int d = (((int) data[i]) & 0x0ff) << 16;

buf.append(legalChars[(d >> 18) & 63]);

buf.append(legalChars[(d >> 12) & 63]);

buf.append("==");

}

return buf.toString();

}

private static int decode(char c) {

if (c >= 'A' && c <= 'Z')

return ((int) c) - 65;

else if (c >= 'a' && c <= 'z')

return ((int) c) - 97 + 26;

else if (c >= '0' && c <= '9')

return ((int) c) - 48 + 26 + 26;

else

switch (c) {

case '+':

return 62;

case '/':

return 63;

case '=':

return 0;

default:

throw new RuntimeException("unexpected code: " + c);

}

}

/**

* Decodes the given Base64 encoded String to a new byte array. The byte

* array holding the decoded data is returned.

*/

public static byte[] decode(String s) {

ByteArrayOutputStream bos = new ByteArrayOutputStream();

try {

decode(s, bos);

} catch (IOException e) {

throw new RuntimeException();

}

byte[] decodedBytes = bos.toByteArray();

try {

bos.close();

bos = null;

} catch (IOException ex) {

System.err.println("Error while decoding BASE64: " + ex.toString());

}

return decodedBytes;

}

private static void decode(String s, OutputStream os) throws IOException {

int i = 0;

int len = s.length();

while (true) {

while (i < len && s.charAt(i) <= ' ')

i++;

if (i == len)

break;

int tri = (decode(s.charAt(i)) << 18)

+ (decode(s.charAt(i + 1)) << 12)

+ (decode(s.charAt(i + 2)) << 6)

+ (decode(s.charAt(i + 3)));

os.write((tri >> 16) & 255);

if (s.charAt(i + 2) == '=')

break;

os.write((tri >> 8) & 255);

if (s.charAt(i + 3) == '=')

break;

os.write(tri & 255);

i += 4;

}

}

}

~~~~~~~~~~~~~~~~~~~~~~~~

造成這樣的原因主要是因為安卓RSA的加密標準跟服務端加密標準不一樣

安卓端加密標準為:RSA/ECB/PKCS1Padding

服務端加密標準為:RSA

在Android中應該使用這個標準

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

在服務端使用這個標準

Cipher cipher = Cipher.getInstance("RSA");

轉載于:https://www.cnblogs.com/pigy/p/6700095.html

總結

以上是生活随笔為你收集整理的android底层rsa加密,android 下RSA加密解密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。