辅导:Crtpto++的RSA签名算法
来源:优易学  2011-12-3 11:00:39   【优易学:中国教育考试门户网】   资料下载   IT书店
  将常见的一些加密库都测试一下,再根据情况选择一个应用到项目中去.crypto++国内用得蛮多的,资料还算比较齐全,但是让我讨厌的是源文件太乱,把所有的算法都包括进去了,我目前不能辨别哪些文件是我需要的,所以编译crypto++的源代码生成的静态链接库居然达到了34M,很恐怖啊,软件发布时光这个算法库就得34M,比软件本身还大了,正在想办法提取自己需要的部分.
  #include "randpool.h"
  #include "rsa.h"
  #include "hex.h"
  #include "files.h"
  #include <iostream>
  using namespace std;
  using namespace CryptoPP;
  // 函数声明
  void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed);
  string RSAEncryptString(const char *pubFilename, const char *seed, const char *message);
  string RSADecryptString(const char *privFilename, const char *ciphertext);
  RandomPool & GlobalRNG();
  // 主程序
  int main()
  {
  char priKey[128] = {0};
  char pubKey[128] = {0};
  char seed[1024] = {0};
  // 生成 RSA 密钥对
  strcpy(priKey, "private.ilcd"); // 生成的私钥文件名
  strcpy(pubKey, "public.ilcd"); // 生成的公钥文件名
  strcpy(seed, "seed");
  //创建公钥,青年人网提示私钥配对
  GenerateRSAKey(1024, priKey, pubKey, seed);
  // RSA 加解密
  char message[1024] = {0};
  strcpy(message, "www.ilcd.tv");
  cout<<"原始字符串:\t"<<message<<endl<<endl;
  string encryptedText = RSAEncryptString(pubKey, seed, message); // RSA 加密
  cout<<"加密后字符串:\t"<<encryptedText<<endl<<endl;
  string decryptedText = RSADecryptString(priKey, encryptedText.c_str()); // RSA 解密
  cout<<"解密后字符串:\t"<<decryptedText<<endl<<endl;
  return 0;
  }
  // 生成RSA密钥对
  void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed)
  {
  RandomPool randPool;
  randPool.Put((byte *)seed, strlen(seed));
  RSAES_OAEP_SHA_Decryptor priv(randPool, keyLength);
  HexEncoder privFile(new FileSink(privFilename));
  priv.DEREncode(privFile);
  privFile.MessageEnd();
  RSAES_OAEP_SHA_Encryptor pub(priv);
  HexEncoder pubFile(new FileSink(pubFilename));
  pub.DEREncode(pubFile);
  pubFile.MessageEnd();
  }
  // RSA加密
  string RSAEncryptString(const char *pubFilename, const char *seed, const char *message)
  {
  FileSource pubFile(pubFilename, true, new HexDecoder);
  RSAES_OAEP_SHA_Encryptor pub(pubFile);
  RandomPool randPool;
  randPool.Put((byte *)seed, strlen(seed));
  string result;
  StringSource(message, true, new PK_EncryptorFilter(randPool, pub, new HexEncoder(new StringSink(result))));
  return result;
  }
  // RSA解密
  string RSADecryptString(const char *privFilename, const char *ciphertext)
  {
  FileSource privFile(privFilename, true, new HexDecoder);
  RSAES_OAEP_SHA_Decryptor priv(privFile);
  string result;
  StringSource(ciphertext, true, new HexDecoder(new PK_DecryptorFilter(GlobalRNG(), priv, new StringSink(result))));
  return result;
  }
  // 定义全局的随机数
  RandomPool & GlobalRNG()
  {
  static RandomPool randomPool;
  return randomPool;
  }

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训