广告开发SDK项目:
今日在开发过程中,在上报数据时需要对数据进行加密,依然使用了异或加密并对加密结果进行Base64.encodeToString加密。
public static String yihuojiami(String str, String code) {
try {
str = URLEncoder.encode(str, "UTF-8");
} catch (UnsupportedEncodingException e) {
}
byte[] data = str.getBytes();
byte[] keyData = code.getBytes();
int keyIndex = 0;
for (int x = 0; x < data.length; x++) {
data[x] = (byte) (data[x] ^ keyData[keyIndex]);
keyIndex++;
if (keyIndex == keyData.length) {
keyIndex = 0;
}
}
return Base64.encodeToString(data, Base64.DEFAULT);
}在对UserAgent内容时 编码后的内容出现了“+”,到此并没有什么问题,但是在和后台交互时 post上报数据时,“+” 被转换成了“ ”,造成了后台解密失败,原因是因为post过去编码时把+当作了特殊字符。
解决方法:1.前端在交互之前将“+” 替换“%2B“
2.服务器端在接受到数据后,可以将” “替换成”+“
这两种方法也能解决问题,Base64提供了不同的编码模式,Base64.URL_SAFE 这个模式的意思是加密时不使用对URL和文件名有特殊意义的字符来作为加密字符,具体就是以-和_取代+和/。当然还有其他的模式Base64.NO_WRAP 这个模式在编码后会自动将内容中的/n去掉。
本文介绍了一个在广告开发SDK项目中遇到的问题,即异或加密后的字符串经Base64编码后出现“+”符号导致与后台交互失败的情况,并提出了两种解决方案:一是在前端将“+”替换为“%2B”,二是在服务器端将空白符替换为“+”。此外还介绍了Base64的不同编码模式。
1385

被折叠的 条评论
为什么被折叠?



