Java/IOS通用异或加解密字符串
来源:互联网 发布:淘宝客转换淘口令软件 编辑:程序博客网 时间:2024/06/06 05:50
1、Java的异或加解密算法
在使用异或加解密时,加密和解密的密钥必须保持相同,否则解密时无法恢复为原来的内容。
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));}}
2、IOS加解密算法
在使用异或加解密时,加密和解密的密钥必须保持相同,否则解密时无法恢复为原来的内容。如果想在IOS与Java中通用,必须保持Java与IOS中的密钥一致。
1).h文件内容
#import <Foundation/Foundation.h>@interface XOREncryptAndDecrypt : NSObject/** * 字符串加密 * * @param plainText 要加密的字符串 * * @return 加密后的字符串 */+ (NSString *)encryptForPlainText:(NSString *)plainText;/** * 解密字符串 * * @param encryption 要解密的字符串 * * @return 要解密的字符串 如果不为加密字符则返回原字符串 */+ (NSString *)decryptForEncryption:(NSString *)encryption;@end
2).m文件内容
#import "XOREncryptAndDecrypt.h"@implementation XOREncryptAndDecryptstatic NSString *secretKey =@"abcdefghijklmnopqrstuvwxyz"; ///<密钥 加解密的密钥必须相同 可自定义#pragma mark 加密字符串+ (NSString *)encryptForPlainText:(NSString *)plainText{ //保存加密后的字符 NSMutableString *encryption=[NSMutableString string]; //编码转换后的字符串 UTF_8->iso-8859-1 NSString *encoding=[[NSString alloc]initWithData:[plainText dataUsingEncoding:NSUTF8StringEncoding] encoding:NSISOLatin1StringEncoding]; for(int i=0,j=0;i<encoding.length;i++,j++){ if(j==secretKey.length){ j=0; } //异或后的字符 char cipher=(char)([encoding characterAtIndex:i]^[secretKey characterAtIndex:j]); //NSLog(@"%c转成16进制的字符串:%@,%@",cipher,[NSString stringWithFormat:@"%hhx",cipher],[NSString stringWithFormat:@"%x",cipher&0xff]); //转成16进制形式的字符串 \x8b转成8b字符串 NSString *strCipher= [NSString stringWithFormat:@"%hhx",cipher]; if(strCipher.length == 1){ [encryption appendFormat:@"0%@",strCipher]; }else{ [encryption appendString:strCipher]; } } return encryption;}#pragma mark 解密 如果不为加密字符则返回原字符+ (NSString *)decryptForEncryption:(NSString *)encryption { //保存解密后的字符 NSMutableString *decryption=[NSMutableString string]; //解码字符 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=[encryption substringWithRange:NSMakeRange(i*2, 2)]; char *endptr; //把16进制形式的字符串转为字符 char n=(char)(int)strtoul([tem UTF8String],&endptr,16); //判断是否为加密字符 if (n=='\0'&&*endptr!='\0') { [decryption setString:@""]; break; } [decryption appendFormat:@"%c",(char)(n^[secretKey characterAtIndex:j])]; } if (![decryption isEqualToString:@""]) { //编码后的字符串 iso-8859-1 -> UTF_8 decoding=[[NSString alloc]initWithData:[[decryption copy] dataUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding]; } if (decoding==nil) { decoding=encryption; } return decoding;}@end
0 0
- Java/IOS通用异或加解密字符串
- Java DES 加解密字符串、文件 工具类通用
- ios与android与java通用的AES加解密
- java异或加解密及其改善
- JAVA、C# DES通用加解密
- 通用加解密引擎
- java/android jni练习-字符串加解密
- 用异或进行加解密
- C#实现内存中字符串或byte[]的加解密
- ios java 3DES 加解密
- ios、java之间的RSA加解密
- JAVA和PHP通用的加解密整理版
- java C# objective-c通用AES对称加解密
- JAVA和PHP通用的加解密整理版
- JAVA异或解密字符串(自我备忘)
- ios des加密与解密(对应JAVA加解密)
- IOS 异或加密解密
- 字符串的加解密
- android自定义控件并添加属性的方法以及示例
- xml.Save("configure.xml")与xml.Save(Filename)的区别
- unity3d引用android第三方sdk
- Wincap在vc下的编译错误
- 【剑指offer】重构二叉树
- Java/IOS通用异或加解密字符串
- 2014年4月操作系统份额:Windows XP仍然在26%以上,Linux微涨
- java 读取某个文件夹下的所有文件夹和文件, 返回所有文件名
- hdu1867
- 全局对象Application的使用,以及如何在任何地方得到Application全局对象
- fzu 2132
- android overridePendingTransition
- 拥抱变化-----http post请求出现400异常
- Longest Consecutive Sequence ----leetcode