saz*_*azr 6 c c++ cryptography public-key-encryption
您是否知道在C++或C中演示公钥私钥加密(PPKE)的教程?
我试图了解它是如何工作的,并最终使用Crypto ++使用公共私钥创建自己的加密.也许这是一个Crypto ++ PPKE教程?
也许有人可以解释公钥和私钥之间的关系(如果有的话)?任何人都可以建议我可以使用一些非常简单的公钥和私钥值(如'char*32','char/32')来创建我的简单PPKE程序来理解这个概念?
这是RSA的玩具版本,我写了一些时间.使它成为玩具的东西是它只使用32位数字.为了提供安全的任何有意义的水平,你需要支持多更大的数字为数学(典型键范围是像1024-4096位左右,虽然后者可能不会大有作为).
尽管如此,这确实实现了真正的RSA算法.插入一个bignum包需要相对较少,因此这段代码可以使用实际大小的RSA密钥(尽管大多数其他实现可能更快).
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <functional>
const int e_key = 47;
const int d_key = 15;
const int n = 391;
struct crypt : std::binary_function<int, int, int> {
int operator()(int input, int key) const {
int result = 1;
for (int i=0; i<key; i++) {
result *= input;
result %= n;
}
return result;
}
};
int main() {
std::string msg = "Drink more Ovaltine.";
std::vector<int> encrypted;
std::transform(msg.begin(), msg.end(),
std::back_inserter(encrypted),
std::bind2nd(crypt(), e_key));
std::transform(encrypted.begin(), encrypted.end(),
std::ostream_iterator<char>(std::cout, ""),
std::bind2nd(crypt(), d_key));
std::cout << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然,这仅覆盖了加密和解密本身-这是一个很长的方式短的是一个完整的保障体系.
与评论所指出的非常相似,这纯粹是为了支持对算法的理解.我从来没有把它用于严肃的用途,也许永远不会.虽然支持真正的密钥大小是相当微不足道的,但是我是否会做到这一点仍然存在疑问 - 如果我这样做,有人可能会误认为它应该用于真实数据,我并不打算这样做.
www.muppetlabs.com/~breadbox/txt/rsa.html
本文非常适合想要理解RSA但没有扎实的数学背景的程序员.这是唯一让我理解RSA的文章.它不包含C或C++代码,但一旦你理解它是如何工作的,你应该能够编写自己的代码.(尽管我同意其他人不建议这样做,但是对于清楚地了解RSA应该仍然有帮助)希望它有所帮助!