erlang加密模块crypto的一些使用

crypto

模块描述
该模块提供一系列加密函数:

  • 散列函数-安全散列标准,MD5报文摘要算法(RFC 1321)和MD4报文摘要算法(RFC 1320);
  • Hmac函数-散列消息认证(RFC 2104)
  • 分组密码-DES和AES的分组密码模式-ECB,CBC,CFB,OFB和CTR
  • RSA加密(RFC 1321)
  • 数字签名 数字签名标准(DSS)和椭圆曲线数字签名算法(ECDSA)
  • 安全远程密码协议(RFC 2945)

数据类型

key_value() = integer() | binary()
digest_type() = md5 | sha | sha224 | sha256 | sha384 | sha512
hash_algorithms() = md5 | ripemd160 | sha | sha224 | sha256 | sha384 | sha512
rsa_private() = [key_value()] = [E, N, D] | [E, N, D, P1, P2, E1, E2, C]
dss_private() = [key_value()] = [P, Q, G, X]
ecdh_private() = key_value()
ecdh_params() = ec_named_curve() | ec_explicit_curve()
ec_named_curve() ->
  sect571r1| sect571k1| sect409r1| sect409k1| secp521r1| secp384r1| secp224r1| secp224k1|
  secp192k1| secp160r2| secp128r2| secp128r1| sect233r1| sect233k1| sect193r2| sect193r1|
  sect131r2| sect131r1| sect283r1| sect283k1| sect163r2| secp256k1| secp160k1| secp160r1|
  secp112r2| secp112r1| sect113r2| sect113r1| sect239k1| sect163r1| sect163k1| secp256r1|
  secp192r1|
  brainpoolP160r1| brainpoolP160t1| brainpoolP192r1| brainpoolP192t1| brainpoolP224r1|
  brainpoolP224t1| brainpoolP256r1| brainpoolP256t1| brainpoolP320r1| brainpoolP320t1|
  brainpoolP384r1| brainpoolP384t1| brainpoolP512r1| brainpoolP512t1
ec_explicit_curve() = {ec_field(), Prime :: key_value(), Point :: key_value(), Order :: integer(), CoFactor :: none | integer()}
ec_field() = {prime_field, Prime :: integer()} | {characteristic_two_field, M :: integer(), Basis :: ec_basis()}
ec_basis() = {tpbasis, K :: non_neg_integer()} | {ppbasis, K1 :: non_neg_integer(), K2 :: non_neg_integer(), K3 :: non_neg_integer()} | onbasis

常用函数
sign/4
用法:

sign(Algorithm, DigestType, Msg, Key) -> binary() when
  Algorithm = rsa | dss | ecdsa,
  DigestType = digest_type(),
  Msg = binary() | {digest, binary()},
  Key = rsa_private() | dss_private() | [ecdh_private(), ecdh_params()].

生成数字签名,类似于public_key:sign/3。

verify/5

verify(Algorithm, DigestType, Msg, Signature, Key) -> boolean() when
  Algorithm = rsa | dss | ecdsa,
  DigestType = digest_type(),
  Msg = binary() | {digest,binary()},
  Signature = binary(),
  Key = rsa_public() | dss_public() | [ecdh_public(),ecdh_params()].

数字签名验证,类似于public_key:verify/4。

hmac/3 & hmac/4

hmac(Type, Key, Data, MacLength) -> binary() when
  Type = 散列算法,除了ripemd160,
  Key = iodata(),
  Data = iodata(),
  MacLength = integer().

利用哈希算法,一个密钥Key和一个消息Data为输入,生成一个消息摘要。

时间: 2024-10-12 13:30:40

erlang加密模块crypto的一些使用的相关文章

erlang判断模块导出函数问题

erlang本身提供一个接口,可以用来检查模块是否有导出函数,这个接口是erlang:function_exported/3,但是很多时候这个接口无法正常使用. 下面重现一下这个问题: 1> erlang:function_exported(crypto,start,0). false 2> crypto:start(). ok 3> erlang:function_exported(crypto,start,0). true 注意:例子中并不是说一定要crypto:start()才能使

前端知识点回顾——Nodejs

Node.js 事件循环机制 setImmediate()是将事件插入到事件队列尾部,主线程和事件队列的函数执行完成之后立即执行setImmediate指定的回调函数,和setTimeout(fn,0)的效果差不多 process.nextTick()方法可以在当前"执行栈"的尾部-->下一次Event Loop(主线程读取"任务队列")之前-->触发process指定的回调函数.也就是说,它指定的任务总是发生在所有异步任务之前,当前主线程的末尾. 事件

NodeJs 中的Crypto 加密模块

加密技术通常分为两大类:“对称式”和“非对称式”. 对称式加密: 就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典型的“对称式”加密法,它的Session Key长度为56bits.非对称式加密: 就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件. 加密为系统中经常使用的功能,node自带强大的加密功能Crypto,下面通过简单的例子

nodejs的某些api~(二)crypto加密模块

就随便写写crypto模块,加密在node里面挺重要的,特别是密码,用户名都用crypto加密,在我写的那个作品里面,用户名密码的存储都是用crypto加密的,也没有深究里面的内容,想深究的同学可以看: 点我 //crypto.getCiphers();返回一个数组,包含支持的加密算法的名字: //crypto.getHashes();返回ige包含所支持的哈希算法的数组:都可以在node里试试,返回一大长串.//crypto.createCredentials(details);创建一个加密凭

详解Node.js API系列 Crypto加密模块(1)

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,它们都需要

Node.js 内置模块crypto加密模块(1)md5和shax

MD5:消息摘要算法(Message-Digest Algorithm) SHA家族:安全散列算法( Secure Hash Algorithm ) 1.首先看一个简单的加密 "use strict"; //引入crypto模块const crypto = require("crypto"); //创建一个使用md5加密的hash对象,也可以使用sha1.sha256.sha512加密let hash = crypto.createHash("md5&qu

Node.js 内置模块crypto加密模块(3) HMAC

HMAC:哈希消息认证码 ( Hash-based Message Authentication Code ) HMAC是密钥相关的哈希算法 使用 HMAC 进行加密的Node实现的一种方法: "use strict"; const crypto = require("crypto");//实例化一个hmac对象,使用md5进行加密,加密密钥是secret-key const hmac = crypto.createHmac("md5", &qu

Node.js 内置模块crypto加密模块(2) AES

AES:高级加密标准 ( Advanced Encryption Standard ) AES是一种对称加密算法:加密需要密钥,且加密密钥和解密密钥相同 下面是AES加密的Node实现: "use strict"; const crypto = require("crypto"); //封装使用AES加密的方法 function aesEncrept(data, key){ //实例化一个cipher加密对象,使用aes192进行加密,key作为密钥 const c

一位Erlang程序猿的自白

12.00 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority