整理常用加密 iOS 与 Android 加密 MD5-SHA1
1.MD5算法
不可逆
128位或者64位串,byte数字长度就是16和8,一般表示是使用16进制来表示的话,1个byte转换成2个16bit,分别表示高地位,所以生成的字符串是16位或者是32位的,16位其实是从32位中的中间部分抽出来的。
我们所说的密码多少位,是表示多少bit,转换成byte数组的话,就是除以8,但是如果输出16进制的话就是除以4,因为"1111 1111"="FF";
举例来说:256位 byte数组或者NSData的length就是256/8=32 输出16进制就是32*2=64位
MD5算法 Java 代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; public class EncrypMD5 { /**
* TODO(description of this method)
* @param args
* @author 丶贰九 2015-4-29 下午5:33:52
* @since v1.0
*/
public static void main(String[] args) throws NoSuchAlgorithmException{
String msg = "丶贰九";
EncrypMD5 md5 = new EncrypMD5();
byte[] resultBytes = md5.eccrypt(msg);
System.out.println("明文是:" + msg);
System.out.println("密文是:" + EncrypMD5.hexString(resultBytes));
}
//byte字节转换成16进制的字符串MD5Utils.hexString
public static String hexString(byte[] bytes){
StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < bytes.length; i++) {
int val = ((int) bytes[i]) & 0xff;
if (val < 16)
hexValue.append("0");
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
} public byte[] eccrypt(String info) throws NoSuchAlgorithmException{
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] srcBytes = info.getBytes();
//使用srcBytes更新摘要
md5.update(srcBytes);
//完成哈希计算,得到result
byte[] resultBytes = md5.digest();
return resultBytes;
}
}
MD5 iOS Objective-C代码:
//md5加密
- (NSString *)md5:(NSString *)str
{
const char *cStrValue = [str UTF8String];
unsigned char theResult[CC_MD5_DIGEST_LENGTH];
CC_MD5(cStrValue, (unsigned)strlen(cStrValue), theResult);
return [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
theResult[], theResult[], theResult[], theResult[],
theResult[], theResult[], theResult[], theResult[],
theResult[], theResult[], theResult[], theResult[],
theResult[], theResult[], theResult[], theResult[]];
}
最后结果是:
明文是:丶贰九
密文是:203ecebd64a8366e58acf19bbb3148dd
2.SHA算法
不可逆
SHA1,SHA256,SHA384,SHA512 分别对应160位,256位import java.security.MessageDigest;
SHA算法 Java 代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; public class EncrypSHA { /**
* TODO(description of this method)
*
* @param args
* @author丶贰九 2015-4-29 下午5:12:17
* @since v1.0
*/ //byte字节转换成16进制的字符串MD5Utils.hexString
public byte[] eccrypt(String info, String shaType) throws NoSuchAlgorithmException {
MessageDigest sha = MessageDigest.getInstance(shaType);
byte[] srcBytes = info.getBytes();
// 使用srcBytes更新摘要
sha.update(srcBytes);
// 完成哈希计算,得到result
byte[] resultBytes = sha.digest();
return resultBytes;
} public byte[] eccryptSHA1(String info) throws NoSuchAlgorithmException {
return eccrypt(info, "SHA1");
} public byte[] eccryptSHA256(String info) throws NoSuchAlgorithmException {
return eccrypt(info, "SHA-256");
} public byte[] eccryptSHA384(String info) throws NoSuchAlgorithmException {
return eccrypt(info, "SHA-384");
} public byte[] eccryptSHA512(String info) throws NoSuchAlgorithmException {
return eccrypt(info, "SHA-512");
} public static void main(String[] args) throws NoSuchAlgorithmException {
String msg = "丶贰九";
EncrypSHA sha = new EncrypSHA();
String sha1=sha.hexString(sha.eccryptSHA1(msg));
System.out.println("明文:"+msg);
System.out.println("密文:"+sha1);
} public static String hexString(byte[] bytes){
StringBuffer hexValue = new StringBuffer(); for (int i = ; i < bytes.length; i++) {
int val = ((int) bytes[i]) & 0xff;
if (val < )
hexValue.append("");
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
}
SHA 算法 iOS Objective-C代码:
//sha1加密
- (NSString *)sha1:(NSString *)str
{
const char *cstr = [str UTF8String];
//使用对应的CC_SHA1,CC_SHA256,CC_SHA384,CC_SHA512的长度分别是20,32,48,64
unsigned char digest[CC_SHA1_DIGEST_LENGTH];
//使用对应的CC_SHA256,CC_SHA384,CC_SHA512
CC_SHA1(cstr, strlen(cstr), digest);
NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * ];
for(int i = ; i < CC_SHA1_DIGEST_LENGTH; i++) {
[result appendFormat:@"%02x", digest[i]];
}
return result;
}
明文:丶贰九
密文:600c7ca56a913a86a501d683846752113ed65824
整理常用加密 iOS 与 Android 加密 MD5-SHA1的更多相关文章
- 超全!整理常用的iOS第三方资源(转)
超全!整理常用的iOS第三方资源 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地 ...
- 整理常用的iOS第三方资源
一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://github. ...
- 【转】超全!整理常用的iOS第三方资源 -- 不错
原文网址:http://www.cocoachina.com/ios/20160121/14988.html 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ ...
- 超全!整理常用的iOS第三方资源
一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://github. ...
- IOS常见的加密方法,常用的MD5和Base64
iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...
- iOS常用加密方法(aes、md5、base64)
1.代码 iOS常用加密方法(aes.md5.base64) .AES加密 NSData+AES.h文件 // // NSData-AES.h // Smile // // Created by 周 ...
- .NET/android/java/iOS AES通用加密解密(修正安卓)
移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...
- IOS中把字符串加密/IOS中怎么样MD5加密/IOS中NSString分类的实现
看完过后,你会学到: 1学习IOS开发中的分类实现, 2以及类方法的书写, 3以及字符串的MD5加密/解密. ---------------------------wolfhous---------- ...
- wemall app商城源码android开发MD5加密工具类
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...
随机推荐
- Fedora 21 安装 Nvidia 驱动以及失败后的补救方法
在 Linux 桌面系统下玩了这么久,大部分时间都是使用 Ubuntu,偶尔使用一下 Fedora.我的电脑中安装有多个 Linux 发行版,见这里<在同一个硬盘上安装多个Linux发行版及Fe ...
- 如果你发现mysql的外键约束不管用了
不知为何我机子上的mysql竟然默认关闭外键约束,导致我试了好多遍都可以插入非法值,以下语句可以开启约束 SET foreign_key_checks = 1; (0则关闭) 备忘
- (转载)JAVA动态编译--字节代码的操纵
在一般的Java应用开发过程中,开发人员使用Java的方式比较简单.打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了.这种开发模式背后的过程是:开发人员编写的 ...
- Atitit 编程语言编程方法的进化演进 sp COP ,AOP ,SOP
Atitit 编程语言编程方法的进化演进 sp COP ,AOP ,SOP 1.1. Sp oop>>COP ,AOP ,SOP1 1.2. Sp oop 结构化方法SP(Stru ...
- 8.GitHub实战系列~8.使用GitHub建立自己的免费博客
github实战汇总:http://www.cnblogs.com/dunitian/p/5038719.html 创建一个用户名.github.io的仓库 选择设置页面风格 页面基本信息 选择一个你 ...
- JavaScript的闭包
1. 什么是闭包 通俗地讲,JavaScript 中每个的函数都是一个闭包,但通常意义上嵌套的函数更能够体现出闭包的特性,请看下面这个例子: var generateClosure = functio ...
- Log4net入门(ASP.NET MVC 5篇)
在前4篇Log4net入门文章中,我们讲述了log4net的一些简单用法,在这一篇中我们主要讲述如何在ASP.NET MVC 5项目中将日志信息写入SQL Server数据库中. 一.创建最简单的AS ...
- 设计模式(五): 简单而又不失其重要性的单例模式(Singleton Pattern)
上篇博客我们系统的介绍了三种工厂模式,今天我们就来介绍一下单例模式.单例模式虽然简单,但是还是比较重要的,是常用设计模式之一.在之前的博客<Objective-C中的单例模式>中介绍了Ob ...
- ORACLE快速彻底Kill掉的会话
在ORACLE数据库当中,有时候会使用ALTER SYSTEM KILL SESSION 'sid,serial#'杀掉一个会话进程,但是使用这个SQL语句杀掉会话后,数据库并不会立即释放掉相关的资源 ...
- Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)
ORACLE集群概念和原理(二) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...