java">
importjava.security.MessageDigest;
publicclassMD5Tool{
publicstaticStringMD5(Stringstr){
MessageDigestmd5=null;
try{
md5=MessageDigest.getInstance("MD5");
}catch(Exceptione){
e.printStackTrace();
return"";
}
char[]charArray=str.toCharArray();
byte[]byteArray=newbyte[charArray.length];
for(inti=0;i<charArray.length;i++){
byteArray[i]=(byte)charArray[i];
}
byte[]md5Bytes=md5.digest(byteArray);
StringBufferhexValue=newStringBuffer();
for(inti=0;i<md5Bytes.length;i++)
{
intval=((int)md5Bytes[i])&0xff;
if(val<16)
{
hexValue.append("0");A
}
hexValue.append(Integer.toHexString(val));
}
returnhexValue.toString();
}
publicstaticStringencryptmd5(Stringstr){
char[]a=str.toCharArray();
for(inti=0;i<a.length;i++)
{
a[i]=(char)(a[i]^'l');
}
Strings=newString(a);
returns;
}
}
在要加密的地方,调用这个类的MD5方法就可以加密了,解密就调用这个类的encryptmd5方法,不过好像解密方法不完全正确,毕竟是解密,不可能对复杂字符加密后的解密完全正确。不过加密算法是完全没有问题的。
2. 介绍iOS中MD5加密算法的使用
前言
软件开发过程中,对数据进行加密是保证数据安全的重要手段,常见的加密有Base64加密和MD5加密。Base64加密是可逆的,MD5加密目前来说一般是不可逆的。
MD5生成的是固定的128bit,即128个0和1的二进制位,而在实际应用开发中,通常是以16进制输出的,所以正好就是32位的16进制,说白了也就是32个16进制的数字。
MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的,但基本是不能一样的)。
MD5算法还具有以下性质:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知含氏原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想缓颤找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
6、MD5加密是不可解密的,但是网上有一些解析MD5的,那个相当于一个大型的数据库,通过匹配MD5去找到原密码。所以,只要在要加密的字符串前面加上一些字母数字符号或者多次MD5加密,这样出来的结果一般是解析不出来的。
MD5的应用:
由于MD5加密算法具有较好的安全性,而且免费,因此该加密算法被广泛使用
大多数的'登录功能向后台提交密码时都会使用到这种算法
注意点:
(1)一定要和后台开发人员约定好,MD5加密的位数是16位还是32位(大多数都是32位的),16位的可以通过32位的转换得到。
(2)MD5加密区分 大小写,使用时要和后台约定好。
MD5解密:
解密网站:http://www.cmd5.com/
为了让MD5码更加安全 涌现了很多其他方法 如加盐。 盐要足够长足够乱 得到的MD5码就很难查到。
终端代码:$ echo -n abc|openssl md5 给字符串abc加密、
苹果包装了MD5加密的扰老败方法,使用起来十分的方便。
#import@interface MD5Encrypt : NSObject// MD5加密/**由于MD5加密是不可逆的,多用来进行验证*/// 32位小写+(NSString *)MD5ForLower32Bate:(NSString *)str;// 32位大写+(NSString *)MD5ForUpper32Bate:(NSString *)str;// 16为大写+(NSString *)MD5ForUpper16Bate:(NSString *)str;// 16位小写+(NSString *)MD5ForLower16Bate:(NSString *)str;@end
#import "MD5Encrypt.h"#import@implementation MD5Encrypt#pragma mark - 32位 小写+(NSString *)MD5ForLower32Bate:(NSString *)str{ //要进行UTF8的转码 const char* input = [str UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(input, (CC_LONG)strlen(input), result); NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [digest appendFormat:@"%02x", result[i]]; } return digest;}#pragma mark - 32位 大写+(NSString *)MD5ForUpper32Bate:(NSString *)str{ //要进行UTF8的转码 const char* input = [str UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(input, (CC_LONG)strlen(input), result); NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [digest appendFormat:@"%02X", result[i]]; } return digest;}#pragma mark - 16位 大写+(NSString *)MD5ForUpper16Bate:(NSString *)str{ NSString *md5Str = [self MD5ForUpper32Bate:str]; NSString *string; for (int i=0; i<24; i++) { string=[md5Str substringWithRange:NSMakeRange(8, 16)]; } return string;}#pragma mark - 16位 小写+(NSString *)MD5ForLower16Bate:(NSString *)str{ NSString *md5Str = [self MD5ForLower32Bate:str]; NSString *string; for (int i=0; i<24; i++) { string=[md5Str substringWithRange:NSMakeRange(8, 16)]; } return string;}@end
3. ios 怎么使用md5进行加密
ios使用md5进行加密的方法:
1、定义头文件:MyAdditions.h
@interface NSString (MyAdditions)
- (NSString *)md5;
@end
@interface NSData (MyAdditions)
- (NSString*)md5;
@end
2、实现主文件:MyAdditions.m
#import "MyAdditions.h"
#import <CommonCrypto/CommonDigest.h> // Need to import for CC_MD5 access
@implementation NSString (MyAdditions)
- (NSString *)md5
{
const char *cStr = [self UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, (int)strlen(cStr), result ); // This is the md5 call
return [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
];
}
@end
@implementation NSData (MyAdditions)
- (NSString*)md5
{
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5( self.bytes, (int)self.length, result ); // This is the md5 call
return [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
];
}
@end
4. Android iOS Hash 算法实现(MD5、SHA1、SHA256)
散列算法是把任掘春意长度的输入(又叫做预映射 pre-image )通过算法变换成固定长度的卜散芹输出。型毕散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。
5. iOS 马甲包 图片md5值修改
一、批量修改md5值
ImageOptim Mac 下无损压缩图片工具,将包含图片的文件夹孙罩拖入工具,会自动扫描文件夹下的所有文件,自动选择最优算法进行优化。一般第一次优化项目时,会有几M到10几M的优化效果。
ImageMagick ImageMagick: 是一款创建、编辑、合成,转换图像的命令行工具。 通过 brew 安装 imagemagick
brew install imagemagick
压缩文件夹下所有 png 文件,会修改 md5 值 ,进则培闹入存放图片的文件夹,运行命令即可
cd 文件路径find . -iname "*.png" -exec echo {} \; -exec convert {} {} \;
二、单个修改md5值(mp4等类型)
(1)查看 md5 值
打开 Terminal (终端),输入“md5”,空格,文件路径,最终命令类似于:
//方式一md5 文件路径//方式二cd 文件路径md5 xxx.mp4//方式三md5-q 文中族件路径
(2)修改 md5 值
修改文件的md5值命令,输入echo 任意字符 >> 文件路径,最终命令类似于:
echo xxx >> 文件路径
6. Android 的几种加密方式
Android 中的最常用得到有三种加密方式:MD5,AES,RSA.
1.MD5
MD5本质是一种散列函数,用以提供消息的完整性保护。
特点:
1.压缩性:任意长度的数据,算出的MD5值长度都是固定的;
2.容易计算:从原数据计算出MD5值很容易;
3.抗修改性:对原数据进行任何改动,哪怕只修改一个字节,所得到的MD5值都有很大的区别
4.强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(及伪造数据)是非常困难的;
2.RSA加密
RSA加密算法是一种非对称加密算法,非对称加密算法需要两个密钥:公共密钥和私有密钥。公钥和私钥是配对的,用公钥加密的数据只有配对的私钥才能解密。
RSA对加密数据的长度有限制,一般为密钥的长度值-11,要加密较长的数据,可以采用数据截取的方法,分段加密。
3.AES加密
AES加密是一种高级加密的标准,是一种区块加密标准。它是一个对称密码,就是说加密和解密用相同的密钥。WPA/WPA2经常用的加密方式就是AES加密算法。
7. APP新增用户是怎么计算出来的
一般来说,新增用户是指首次联网使用应用的用户,以设备号(DeviceID)作为判断标准。
举例(一般情况下):
用户A在该设备D上第1次打开app时,会被记作为1个新增用户;
该用户A在设备D上卸载应用后重新安装该应用,不会被记1个新增用户;
该用户A在设备D上通过其他账号登录,不会被记作1个新增用户;
该用户缓搜A在其他新设备E上第1次打开APP时,会被计作为1个新增用户。
新增用户指标的统计方法,可以简单地理解为,每次获取到1个新的DeviceID,新增用户数+1;在不同平台上,其统计SDK获得DeviceID的处理方法有所不同:
一、Android平台
统计SDK可直接读取到Android设备的IMEI号,用该IMEI号,即可生成DeviceID。
DeviceID可丛历以通过以下公式获取:DeviceID=x1+MD5(android_imei_mac)
二、IOS平台
1、UDID
UDID(设备唯一标识符,Unique Device Identifier),UDID,之前一直是设备唯一标识的神器,各大应用和统计SDK均通过获取UDID标识设备。不过,2013年5月1日后,读取UDID的应用,将被拒绝上架,相当于把这条路封死了。
2、MAC地址
IOS7.0以前的设备,可读取MAC地址,通过该MAC地址,即可生成DeviceID。
DeviceID可以通过以下公式获取:DeviceID=x2+MD5(ios_mac)
IOS7.0及以后的设备,MAC地址返回的是一个固定值,因此对于iOS7.0及以后的设备,将无法通过MAC地渗哪搜址来标识设备的唯一性。
3、openUDID
openUDID,是通过第一个带有OpenUDID SDK包的App生成的,在下列2种情况下,openUDID会重新生成:
(1)、用户卸载了全部带有OpenUDID SDK包的App后,并重新启动设备后,openUDID将会重新生成;
(2)、用户更新了ios系统,或者选择了恢复出厂设置是,openUDID将会重新生成;
考虑到90%以上的用户在IOS系统更新后,均会重新生成openUDID,采用openUDID方法标识用户唯一性也慢慢被弃用。
4、IDFA&IDFV
(1)、IDFA(广告标识符,Advertising Identifier),是苹果公司提供的用于追踪用户的广告ID,同一手机的不同APP对应着相同的IDFA,IDFA可通过以下步骤重置:设置-隐私-广告-还原广告标识符。
如DeviceID可以通过以下公式获取:DeviceID=x2+MD5(IDFA)。
因为IDFA会存在取不到的情况,因此需要选用其他的ID作为DeviceID;在取不到IDFA的情况下,我们选用IDFV;
(2)、IDFV(Vindor标示符,IdentifierForVendor),一般用于追踪用户在应用内的行为,每个设备在所属同一个Vender的应用里值是相同的;如果用户删掉了该vender的所有APP,IDFV将会被重置。
DeviceID可以通过以下公式获取:DeviceID=x2+MD5(IDFV)。
5、UUID
UUID(通用唯一标识码,Universally Unique Identifier),通用唯一识别码,每次生成均不一样;第1次生成后UUID后,需要保存到钥匙串(keyChain)中;应用被删除再重装时,仍然可以从钥匙串得取到UUID;在一台设备上,同一个开发者账号的所有APP,可获取到相同的UDID;刷机或者重新安装系统后,UUID将重新生成。
DeviceID可以通过以下公式获取:DeviceID=x2+MD5(UUID)。
综上可知,IOS的DeviceID的获取方法可以概括为:
IOS7.0以前的设备,DeviceID=x2+MD5(ios_mac)
IOS7.0及以后的设备,DeviceID=x2+MD5(IDFA/IDFV/UUID),即先去IDFA的值,取不到IDFA时去取IDFV的值,再取不到时IDFA时,则生成UUID;
补充说明:这里x1和x2,是为了区分不同类型DeviceID,自定义的前缀。
如:
x1abcd123……
x2abcd123……
通过查看前缀,即可知道这些设备号是Android的还是iOS的。
8. ios md5加密原理是什么意思
MD5加密算法原理MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。这三个算法的描述和C语言源代码在Internet RFCs 1321中有详细的描述( http://www.ietf.org/rfc/rfc1321.txt),这是一份最权威的文档,由Ronald L. Rivest在1992年8月向IEFT提交。. .
9. 简单讲解iOS应用开发中的MD5加密的使用
一、简单说明
1.说明
在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题。
如:可以利用软件(比如Charles)设置代理服务器,拦截查看手机的请求数据
“青花瓷”软件
因此:提交用户的隐私数据时,一定不要明文提交,要加密处理后再提交
2.常见的加密算法
MD5 SHA DES 3DES RC2和RC4 RSA IDEA DSA AES
3.加密算法的选择
一般公司都会有一套自己的加密方案,按照公司接口文档的规定去加密
二、MD5
1.简单说明
MD5:全称是Message Digest Algorithm 5,译为“消息摘要算法第5版”
效果:对输入信息没档察生成唯一的.128位散列值(32个字符)
2.MD5的特枯茄点
(1)输入两个不同的明文不会得到相同的输出值
(2)根据输出值,不能得到原始的明文,即其过程不可逆
3.MD5的应用
由于MD5加密算法具有较好的安全性,而且免费,因此该加密算法被广泛使用
主要运用在数字签名、文件完整性验证以及口令加密等方面
4.MD5破解
MD5解密网站:http://www.cmd5.com
5.MD5改进
现在的MD5已不再是绝对安全,对此,可以对MD5稍作改进,以增加解密的难度
加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5
先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序
总之宗旨就是:黑客就算攻破了数据库,也无法解密出正确的明文
代码示例:
复制代码 代码如下:
#import "HMViewController.h"
#import "NSString+Hash.h"
#define Salt @"fsdhjkfhjksdhjkfjhkd546783765"
@interface HMViewController ()
@end
@implementation HMViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self digest:@"123"]; //
[self digest:@"abc"];
[self digest:@"456"];
}
/**
* 直接用MD5加密
*/
- (NSString *)digest:(NSString *)str
{
NSString *anwen = [str md5String];
NSLog(@"%@ - %@", str, anwen);
return anwen;
}
/**
* 加盐
*/
- (NSString *)digest2:(NSString *)str
{
str = [str stringByAppendingString:Salt];
NSString *anwen = [str md5String];
NSLog(@"%@ - %@", str, anwen);
return anwen;
}
/**
* 多次MD5
*/
- (NSString *)digest3:(NSString *)str
{
NSString *anwen = [str md5String];
anwen = [anwen md5String];
NSLog(@"%@ - %@", str, anwen);
return anwen;
}
/**
* 先加密, 后乱蠢悄序
*/
- (NSString *)digest4:(NSString *)str
{
NSString *anwen = [str md5String];
// 注册: 123 ----
// 登录: 123 ---
NSString *header = [anwen substringToIndex:2];
NSString *footer = [anwen substringFromIndex:2];
anwen = [footer stringByAppendingString:header];
NSLog(@"%@ - %@", str, anwen);
return anwen;
}
@end
(1)直接使用MD5加密(去MD5解密网站即可破解)
(2)使用加盐(通过MD5解密之后,很容易发现规律)
(3)多次MD5加密(使用MD5解密之后,发现还是密文,那就接着MD5解密)
(4)先加密,后乱序(破解难度增加)
三、注册和验证的数据处理过程
1.提交隐私数据的安全过程 – 注册
2.提交隐私数据的安全过程 – 登录
10. SMSSDK android发验证码返回错误码489MD5错误
集成SMSSDK从3.3.0版本开始必须要在mob后台配置MD5签名(md5是指Android端apk签名文件(keystore)中的md5值)以下是MD5的使用规则:
1.md5码限制只针对Android3.3.0以上的版本,Android3.3.0以前的版本或者iOS任何版本,在后台添加md5是不起作用的
2.md5签名中不含“:”
3.md5目前不区分大小写, 必须和自己的包里的md5一致
4.未审核或审核未通过,不影响20条测试
5.原先通过审核的包(同一个包名)升级sdk的话,目前没有测试额度,必须填写MD5并且审核通过才能使用
6.Android和iOS相同包名,只上传了ios的话,就在ios包下设置MD5签名并且审核通过才不影响Android包
7.同一个包名下最多可提交5个md5,只要请求的包中的md5与后台配置的任何一个md5匹配就行
8.如果是gradle集成的用户,只有在重新打包的时候才会更新,不会影响线上版本 如果还有不清楚的地方 可以登陆MobTech官网咨询