《ASCE1885的信息安全》のCrypto++用户手册のeccrypto.h

eccrypto.h提供了基于椭圆曲线加密操作的一系列模板类,将这些类设计成模板主要的原因是有两种类型椭圆曲线。因此,类EC2N(ec2n.h)代表的是基于GF(2n)的椭圆曲线算法;而类ECP(ecp.h)代表的是基于GF(p)的椭圆曲线算法。

椭圆曲线的参数保存在模板类ECParameters中,参数能够以多种方式初始化;但是其中一个更实用的用法是使用函数LoadRecommendedParameters(),它提供了建议参数之一,定义在oids.h中。

下面看几个实例代码:

1)生成一个EC2N密钥对,并保存之:

// ECPrivateKey is used directly only because the private key

 // won't actually be used to perform any cryptographic operation.

 AutoSeededRandomPool rng;

 ECPrivateKey privkey(rng, ASN1::sect233k1);

 

 Base64Encoder privkeysink(new FileSink("c://privkey.txt"));

 privkey.DEREncode(privkeysink);

 privkeysink.MessageEnd();   // Need to flush Base64Encoder's buffer

 

 // Suppose we want to store the public key separately,

 // possibly because we will be sending the public key to a third party.

 ECPublicKey pubkey(privkey);

 

 Base64Encoder pubkeysink(new FileSink("c://pubkey.txt"));

 pubkey.DEREncode(pubkeysink);

 pubkeysink.MessageEnd();    // Need to flush Base64Encoder's buffer

 

2)加载公钥,并加密一个文件:

string sContents;

 FileSource("c://tobesigned.dat", true,

     new StringSink(sContents));

 

 ECEncryptor pubkey(

     FileSource("c://pubkey.txt", true,

         new Base64Decoder)));

 

 // Cannot use std::string for buffer;

 // its internal storage might not be contiguous

 SecByteBlock sbbCipherText(pubkey.CipherTextLength(sContents.size()));

 

 // ECIES encryption is nice because it handles the entire encryption

 // process internally, regardless of the length of input data.

 // We don't have to generate a symmetric session key and encrypt

 // with it separately.

 AutoSeededRandomPool rng;

 pubkey.Encrypt(

     rng,

     (byte const*) sContents.data(),

     sContents.size(),

     sbbCipherText.Begin());

 

 FileSink("c://encrypted.dat").Put(sbbCipherText.Begin(), sbbCipherText.Size());

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值