首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公钥加密教程

公钥加密教程
EN

Stack Overflow用户
提问于 2012-04-04 04:52:21
回答 2查看 13.6K关注 0票数 8

您知道在C++或C?中有一个演示公开私钥加密的教程吗?

我正在努力学习它是如何工作的,并最终使用Crypto++来使用公共私钥创建自己的加密。也许有一个Crypto++ PPKE教程?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-04 05:18:14

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

尽管如此,这确实实现了真正的RSA算法。插入bignum包所需的时间相对较少,因此这段代码可以使用实际大小的RSA密钥(尽管大多数其他实现可能更快)。

代码语言:javascript
复制
#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;
}

当然,这只涉及加密和解密本身--这还需要很长时间才能成为一个完整的安全系统。

正如注释所指出的,这完全是为了支持对算法的理解。我从来没有认真地使用过它,也许永远也不会。虽然支持真正的密钥大小是相当微不足道的,但我是否会这样做,这是个值得怀疑的问题--如果我这样做了,可能有人会把它误认为应该在实际数据上使用,而我并不真正想要这样做。

票数 8
EN

Stack Overflow用户

发布于 2012-04-04 05:25:06

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

这篇文章是为那些想要了解RSA但没有扎实数学背景的程序员而写的。这是唯一一篇让我真正理解RSA的文章。它不包含C或C++代码,但是一旦您了解了它是如何工作的,您应该能够编写自己的代码。(虽然我同意其他人的观点,不推荐它,但对于牧师理解RSA还是有帮助的)希望它能有所帮助!

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10005124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档