您是否知道在C ++或C中演示公钥私钥加密(PPKE)的教程?
我正在尝试了解它是如何工作的,并最终使用Crypto ++使用公共私钥创建自己的加密。也许这是一个Crypto ++ PPKE教程?
也许有人可以解释公钥和私钥之间的关系(如果有的话)?任何人都可以建议我可以使用一些非常简单的公钥和私钥值(比如'char * 32','char / 32')来创建我的简单PPKE程序来理解这个概念吗?
答案 0 :(得分:8)
这是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;
}
当然,这只涵盖了加密和解密本身 - long 方式不足以成为一个完整的安全系统。
就像评论所指出的那样,这纯粹是为了支持对算法的理解。我从来没有把它用于认真使用,也许永远不会。虽然支持真正的密钥大小是相当微不足道的,但是我是否会做到这一点仍有疑问 - 如果我这样做,有人可能会误认为它应该用于真实数据,我不是真的打算。
答案 1 :(得分:8)
www.muppetlabs.com/~breadbox/txt/rsa.html
本文非常适合希望了解RSA但没有扎实的数学背景的程序员。这是唯一让我理解RSA的文章。它不包含C或C ++代码,但一旦你理解它是如何工作的,你应该能够编写自己的代码。 (尽管我同意其他人不同意这一点,但是对于清楚地理解RSA仍然有帮助)希望它有所帮助!