使用mbedtls的使用说明和AES加密方法(原来的PolarSSL)

关于PolarSSL

mbed TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码。这是双重许可Apache许可证 2.0版(与GPLv2许可也可)。网站上指出,mbed TLS的目标是“易于理解,使用,集成和扩展”

核心SSL C编程语言编写,并实现SSL模块,基本加密功能并提供各种实用功能。与OpenSSL和TLS的其他实现不同,mbed TLS设计为适合小型嵌入式设备,最小完整的TLS堆栈需要60KB的程序空间和64KB的RAM。它也是高度模块化的:每个组件,如加密函数,可以独立于框架的其余部分使用。版本也可用于Microsoft WindowsLinux。因为mbed TLS是用C编程语言编写的,没有外部依赖,

PolarSSL的后期版本超过1.3.0,为内核分配和线程添加抽象层,以“支持与现有嵌入式操作系统的更好集成”——机器翻译的凑合着看。想看原版的自行Wikii

现在叫MbedTSL,PolarSSL源码,也许是最小巧的ssl代码库。高效、便于移植和集成。尤其适合嵌入式应用。

也就是说,无论是嵌入式还是桌面软件版的编程,只要你用的到AES,RSA等加密算法,你都可以直接拿过来源码放进你的工程中,进行编译管理,不用带着DLL,或者必须安装一些不必要的库,并且算法是标准库,所以你懂得。并且OpenSource。

关于代码的引用

之前搞了半天,谷歌,百度,冰,都用了,我竟然没找到一篇加入代码的资料,不知道是不是因为这个太简单还是怎么样,反正我是在这个地方饶了很大的圈子,下面就把使用的方法说一下,方便后来者不用费劲。

1、首先可以静态编译,然后引用

就是在下载下来之后(下载地址(上不去的自行翻·qiang):tls.mbed.org

解压

你会发现如下:

OK,如果windows环境编译的话,那就直接“visualc”文件夹,一堆VC++ project文件,剩下的事情,我不想说了,有VS201x的话,打开直接F5,会编译出*.lib文件,剩下的引用就是引用静态库的内容。

2、如果你想把这些源码直接加入工程中

请看这个

“include”里面放的是库的头文件,“library”里面放的是源文件

库文件直接拷入到你的工程文件夹

头文件需要麻烦点:需要打开——拷贝“mbedtls”文件夹放入你的工程文件

放入之后

如果是VS

你需要做的就是:选项——属性——C++?——附加包含目录——添加——选中mbedtls的上一级文件

为什么需要上一级文件,因为头文件里面有很多这样的头文件引用:#include“mbedtls/config.h”,你不这样引用会搞事情的。

然后,连接器——附加库目录——添加library目录进入

剩下的事情就变得简单了,只需要拿来就用就好了。

这中间有一个坑:就是你在使用别人的aes & rsa算法的时候,有些声明,因为版本的问题会失效。这个时候你还需要使用的一个头文件就是:

compat-1.3.h

这里面就是一些#define   ***      ***,不用它会说你没声明???!!!

如果是GCC编译器使用CodeBlocks的话,你需要做也是把头文件目录,库文件目录相应的设置好,然后在使用。这个库一定是能够加入你的源码进行编译的,你需要相信这一点。

3、关于Aes算法

因为我只用了Aes算法,所以这里大体说说思路,我们知道Aes算法是对称加密的算法分为以下几种模式:

EBC:就是把数据块进行加密,没8或者16为一块,进行依次加密,知道完成,不足的补0

CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度。

CFB/OFB实际上是一种反馈模式,目的也是增强破解的难度

参考:http://blog.csdn.net/aaaaatiger/article/details/2525561

如果你只用EBC:

那么打开aes.h,你可以看到:

你只用这个就够了,但是,但是这里只能输入输出16位,也就是说,你需要自己分块,不够的自己补全0,凑够16位。

过程:

  1、声明这个结构体

  mbedtls_aes_context

  2、对结构体进行初始化

  void mbedtls_aes_init( mbedtls_aes_context *ctx );

  3、对加密Key进行设置

  int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
  unsigned int keybits );

  4、使用这个函数进行加密,记得只能加密16个字符,包括‘\0’,所以你需要分割字符串

  int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx,
  int mode,
  const unsigned char input[16],
  unsigned char output[16] );

过程就是这个过程,如果你需要这个详细的资料,自行查看aes.h,里面虽然是英文的但是介绍还是听详细的。

其他模式 我也没用过(我没在怕的,哼!)

4、如果你要加密用于网络传输,记得这个:base64.h

这里面是base64的算法,直接可用

画框的都是重点有大用处。

OK,先这样,想到什么在补充

时间: 2024-07-29 10:19:20

使用mbedtls的使用说明和AES加密方法(原来的PolarSSL)的相关文章

javascript和c#aes加密方法互解

关键信息如下. javascript function Encrypt() { var key = CryptoJS.enc.Utf8.parse('8080808080808080'); var iv = CryptoJS.enc.Utf8.parse('8080808080808080'); var varIn = document.getElementById("txtIn").value; var varOut = CryptoJS.AES.encrypt(CryptoJS.e

Java aes加密C#解密的取巧方法

摘要: 项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Java代码: /** * 加密 * * @param content 需要加密的内... 项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Java代码: /**

iOS常用加密方法(aes、md5、base64)

1.代码 iOS常用加密方法(aes.md5.base64) 1.AES加密 NSData+AES.h文件 // // NSData-AES.h // Smile // // Created by 周 敏 on 12-11-24. // Copyright (c) 2012年 BOX. All rights reserved. // #import <Foundation/Foundation.h> @class NSString; @interface NSData (Encryption)

DES/AES/MD5加密方法

大家好: 今天有空研究了下大家都在喊的AES加密!还以为是什么深奥的东西呢!终于了解了,心中释然了!跟大家一起分享下吧!DES其实就是:数据加密标准 英文的缩写!就是个加密的标注而已,AES就是 高级加密标准 英文的缩写咯,大家都叫缩写叫惯了,搞得我们这些没接触的人一头雾水!心里还真憋屈的慌呢! 这是在搜集资料的时候拿了个例子练手,不过有个问题就是,把这代码放到文本里用CMD运行的时候出现了乱码情况!所幸的是注释,不影响效果!但是,程序要真遇到这样的情况的话,就得转码了,因为文本的编码是GBK的

基于MbedTLS的AES加密实现,含STM32H7和STM32F4的实现例程

说明: 1.mbedTLS的前身是PolarSSL,开源免费. 主要提供了的SSL/TLS支持(在传输层对网络进行加密),各种加密算法,各种哈希算法,随机数生成以及X.509(密码学里公钥证书的格式标准)的支持. 2.mbedTLS支持的加密算法含对称加密和非对称加密 (1)mbedTLS支持的对称加密算法有:AES,ARCFOUR,Blowfish/BF,Camellia,DES/3DES,GCM,XTEA 加密和解密用到的密钥是相同的,加密速度快,适合数据收发通信,缺点是密钥的传输略麻烦.

Java 关于密码处理的工具类[MD5编码][AES加密/解密]

项目中又遇到了加密问题,又去翻了半天,然后做测试,干脆就把常用的两类小结一下. 1.第一种所谓的MD5加密 其实也不算加密,只是基于Hash算法的不可逆编码而已,等于说,一旦经过MD5处理,是不可能从编码后的字符串反推回去的. MD5的方法是基于散列的.本身信息不全.理论上是不能还原成唯一字符串的. 网上所谓的解密,也只是拥有一个足够大的字典映射,将编码前的源字符和编码后的目标字符关联起来而已,大多数常见的还行,复杂点的估计就会话费很长时间,有兴趣的可以试试. 至于MD5的用法,在初次录入的时候

Linux进行AES加密每次结果都不一致并且解密失败报错

1. 现象 windows操作系统下进行"123456"的AES加密 encrypted message is below : QLNYZyjRnKF/zxAjzDt/lw== decrypted message is below : 123456 阿里云服务器,同样是"123456"的密码,每次加密结果都不一样,且不是QLNYZyjRnKF/zxAjzDt/lw==,解密是报错的 2.解决方法 经过检查之后,定位在生成KEY的方法上,如下: public stat

OC与JAVA通用的AES加密解密

最近项目中用到AES加密,但在网上找了很多的库都是OC与JAVA加密后不能项目解密,因为我们的服务器是用java写的,所以不能通用对于做iOS的就是个大麻烦,Android就比较悠哉用java写所以没什么事.不过,在把度娘全身搜遍后,还是让我找到了这个库,出处记不清了,之前找了好多好多的库.下面记录下使用方法. 例子:http://pan.baidu.com/s/1dDktRPn OC调用方法: // // ViewController.m // AESTest // // Created by

Android AES加密工具类实现(基础回顾)

1 package com.powercreator.cms.util; 2 3 import java.security.SecureRandom; 4 import javax.crypto.Cipher; 5 import javax.crypto.KeyGenerator; 6 import javax.crypto.SecretKey; 7 import javax.crypto.spec.IvParameterSpec; 8 import javax.crypto.spec.Secr