繁体   English   中英

公私钥加密教程

[英]Public Private Key Encryption Tutorials

你知道C++或C中演示公私钥加密(PPKE)的教程吗?

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

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

www.muppetlabs.com/~breadbox/txt/rsa.html

这篇文章非常适合想要了解 RSA 但没有扎实数学背景的程序员。 这是唯一一篇真正让我理解 RSA 的文章。 它不包含 C 或 C++ 代码,但一旦您理解了它的工作原理,您应该能够编写自己的代码。 (虽然我同意其他人不推荐的观点,但清晰地理解RSA应该还是有帮助的)希望它有帮助!

这是我前一段时间写的 RSA 的玩具版本。 使它成为玩具的是它只使用 32 位数字。 要提供任何有意义的安全级别,您需要支持更大的数学数字(典型的密钥范围是 1024-4096 位左右,尽管后者可能不会完成很多)。

N.尽管如此,这确实实现了真正的 RSA 算法。 插入 bignum package 所需的时间相对较少,因此此代码可以使用实际大小的 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;
}

当然,这只涵盖了加密和解密本身——这距离成为一个完整的安全系统还有很长的路要走。

就像评论所指出的那样,这纯粹是为了支持对算法的理解。 我从来没有认真使用过它,而且可能永远也不会。 尽管支持真正的密钥大小相当微不足道,但我是否会这样做还有待商榷——如果我这样做了,有人可能会将其误认为是应该用于实际数据的东西,而我并不是真的有意这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM