公共私钥加密教程

时间:2012-04-04 04:52:22

标签: c++ c cryptography public-key-encryption

您是否知道在C ++或C中演示公钥私钥加密(PPKE)的教程?

我正在尝试了解它是如何工作的,并最终使用Crypto ++使用公共私钥创建自己的加密。也许这是一个Crypto ++ PPKE教程?

也许有人可以解释公钥和私钥之间的关系(如果有的话)?任何人都可以建议我可以使用一些非常简单的公钥和私钥值(比如'char * 32','char / 32')来创建我的简单PPKE程序来理解这个概念吗?

2 个答案:

答案 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仍然有帮助)希望它有所帮助!