#pragma mark 加密字符串
encryption 加密结果
decoding 解密结果
+ (NSString *)encryptForPlainText:(NSString *)plainText
{
//保存加密后的字符
NSMutableString *encryption=[NSMutableStringstring];
//编码转换后的字符串 UTF_8->iso-8859-1
NSString *encoding=[[NSStringalloc]initWithData:[plainTextdataUsingEncoding:NSUTF8StringEncoding]encoding:NSISOLatin1StringEncoding];
for(int i=0,j=0;i<encoding.length;i++,j++){
if(j==SECRETKEY.length){
j=0;
}
//异或后的字符
char cipher=(char)([encodingcharacterAtIndex:i]^[SECRETKEYcharacterAtIndex:j]);
//NSLog(@"%c转成16进制的字符串:%@,%@",cipher,[NSString stringWithFormat:@"%hhx",cipher],[NSString stringWithFormat:@"%x",cipher&0xff]);
//转成16进制形式的字符串 \x8b转成8b字符串
NSString *strCipher= [NSStringstringWithFormat:@"%hhx",cipher];
if(strCipher.length ==1){
[encryption appendFormat:@"0%@",strCipher];
}else{
[encryption appendString:strCipher];
}
}
return encryption;
}
#pragma mark 解密如果不为加密字符则返回原字符
+ (NSString *)decryptForEncryption:(NSString *)encryption {
//保存解密后的字符
NSMutableString *decryption=[NSMutableStringstring];
//解码字符
NSString *decoding=nil;
for(int i=0,j=0;i<encryption.length/2;i++,j++){
if(j==SECRETKEY.length){
j=0;
}
//截取16进制形式的字符串 \x8b中的8b
NSString *tem=[encryptionsubstringWithRange:NSMakeRange(i*2,2)];
char *endptr;
//把16进制形式的字符串转为字符
char n=(char)(int)strtoul([temUTF8String],&endptr,16);
//判断是否为加密字符
if (n=='\0'&&*endptr!='\0') {
[decryption setString:@""];
break;
}
[decryption appendFormat:@"%c",(char)(n^[SECRETKEYcharacterAtIndex:j])];
}
if (![decryptionisEqualToString:@""]) {
//编码后的字符串 iso-8859-1 -> UTF_8
decoding=[[NSStringalloc]initWithData:[[decryptioncopy] dataUsingEncoding:NSISOLatin1StringEncoding]encoding:NSUTF8StringEncoding];
}
if (decoding==nil) {
decoding=encryption;
}
return decoding;
}
SECRETKEY为一个宏定义
例如 :
#define SECRETKEY @"jddjdjdJFzlgktyf"
SECRETKEY为我们所要的密匙,iOS 安卓 后台 可以自己随意定义 但是前后 SECRETKEY 必须要统一
java 后台和安卓 本人不是太懂 secretKey SECRETKEY 是一样的
- public class XOREncryptAndDecrypt {
- //密钥 加解密的密钥必须相同 可自定义
- private static final String secretKey ="abcdefghijklmnopqrstuvwxyz";
- /**
- * 字符串加密
- * @param plainText 要加密的字符串
- * @return 加密后的字符串
- */
- public static String encrypt(String plainText){
- String encryption = "";
- try {
- plainText = new String(plainText.getBytes("UTF-8"),"iso-8859-1");
- } catch (Exception e) {
- }
- char[] cipher=new char[plainText.length()];
- for(int i=0,j=0;i<plainText.length();i++,j++){
- if(j==secretKey.length())
- j=0;
- cipher[i]=(char) (plainText.charAt(i)^secretKey.charAt(j));
- String strCipher= Integer.toHexString(cipher[i]);
- if(strCipher.length() == 1){
- encryption+="0"+strCipher;
- }else{
- encryption+=strCipher;
- }
- }
- return encryption;
- }
- /**
- * 解密字符串
- * @param encryption 要解密的字符串
- * @return 解密后的字符串
- */
- public static String decrypt(String encryption) {
- char[] decryption=new char[encryption.length()/2];
- for(int i=0,j=0;i<encryption.length()/2;i++,j++){
- if(j==secretKey.length())
- j=0;
- char n=(char)(int)Integer.valueOf(encryption.substring(i*2,i*2+2),16);
- decryption[i]=(char)(n^secretKey.charAt(j));
- }
- String decoding="";
- try {
- decoding = new String(String.valueOf(decryption).getBytes("iso-8859-1"),"UTF-8");
- } catch (Exception e) {
- }
- return decoding;
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- String name="你好";
- String tem=XOREncryptAndDecrypt.encrypt(name);
- System.out.println(tem);
- System.out.println(XOREncryptAndDecrypt.decrypt(tem));
- }
- }
js方面:
function sea(encryption) {
var decoding = ''
var secretKey = "WQLYYCSXSBDSRYJFzlgktyf"
var brr = secretKey.split('')
for(var i = 0, j = 0; i < encryption.length / 2; i++, j++) {
if(j == brr.length) {
j = 0
}
var n = parseInt(encryption.substring(2 * i, 2 * i + 2), 16)
decoding += '' + String.fromCharCode(n ^ (brr[j].charCodeAt()))
}
// console.log(decoding)
return decoding
}
function aes(str) {
var str = str;
var secretKey = "WQLYYCSXSBDSRYJFzlgktyf"
var cipher = Array(str.length)
var arr = str.split('');
var brr = secretKey.split('')
var encryption = ''
for (var i = 0, j = 0; i < arr.length; i++ , j++) {
if (j == secretKey.length)
j = 0
cipher[i] = (String(arr[i]).charCodeAt()) ^ (brr[j].charCodeAt())
var strCipher = cipher[i].toString(16)
if (strCipher.length == 1) {
encryption += '0' + strCipher
} else {
encryption += strCipher
}
}
// console.log(encryption)
return encryption
}