Tag: 密码学

如何将pem公钥转换为openssl RSA *结构

假设我必须像这样公开pem键 —–BEGIN PUBLIC KEY—– MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o6gJy8UtmIbkcpnk O3Kwc4qsEnSZp/TR+fQi62F79RHWmwKOtFmwteURgLbj7D/WGuNLGOfa/2vse3G2 eHnHl5CB8ruRX9fBl/KgwCVr2JaEuUm66bBQeP5XeBotdR4cvX38uPYivCDdPjJ1 QWPdspTBKcxeFbccDwIDAQAB —–END PUBLIC KEY—– 我想使用openssl int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to,RSA *rsa, int padding) 。 如何将pem键转换为RSA *rsa结构? 仅供参考:我不能使用BIO,因为我只想将openssl移植到没有UNIX文件系统的引导加载程序中。 我能做的唯一方法是将公钥转换为C数组。

用于C语言加密的快速伪随机数发生器

我使用以下代码生成用于加密目的的伪随机数序列,但后来我在某处读到它可能不是很安全。 有人可以给我一个更好的生成器的C实现 – 主要目标是这个方法快速。 例如,我做了一些研究并遇到了Blum Blum Shub方法,它会通过执行pow(N)计算完全扼杀性能。 PS。 请不要引用没有C / C ++代码的维基百科文章。 我正在寻找我在下面展示的C或C ++代码示例。 #define ROL(v, shift) ((((v) >> ((sizeof(v) * 8) – (shift))) | ((v) << (shift)))) ULONGLONG uiPSN = doSeed(); //64-bit unsigned integer for(int i = 0; i < sizeOfArray; i++) { uiPSN = uiPSN * 214013L + 2531011L; uiPSN = ROL(uiPSN, 16); […]

如何提供OpenSSL随机数据以用于ECDSA签名?

我想在使用EC密钥签名数据期间提供OpenSSL特定数据以用作随机种子。 我这样做是为了将我的应用程序与另一个引用程序(闭源)进行比较。 该实用程序将文件与私钥,带有数据的文件进行签名,并将随机数据作为参数进行归档。 我已经获得了EC密钥的生成和数据签名,但由于我没有共同点,因此无法比较这两个应用程序。 OpenSSL生成用于签名数据的随机数据(可能来自/ dev / random),因此每次运行都会给我一个不同的签名。 我已经尝试将RAND_clear()与RAND_add()结合使用,但不断改变签名。 要么我不了解整个ECDSA概念,要么我做错了。 我比较应用程序的第二个选项是导入公钥并validation参考程序生成的签名。 这是更好的选择,但我无法导入给定的示例公钥(83个字符的hex字符串)。 EC_POINT_oct2point()不断给我null结果。 任何帮助/指针/参考将不胜感激。 char * key_as_binary_data; //369368AF243193D001E39CE76BB1D5DA08A9BC0A63307AB352338E5EA5C0E05A0C2531866F3E3C2702 int data_size; //Size of the key buffer EC_POINT * ecpoint = NULL; EC_GROUP * ecgroup = NULL; EC_KEY * eckey = NULL; point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED; int asn1_flag = OPENSSL_EC_NAMED_CURVE; eckey = EC_KEY_new(); ecpoint = EC_POINT_new(ecgroup); ecgroup […]

CPU /编程语言使用哪种取幂算法?

我一直在学习更快的取幂算法(k-ary,滑动门等),并想知道在CPU /编程语言中使用哪些算法? (我对这是否发生在CPU或编译器中都很模糊) 只是为了踢,这是最快的? 关于广度的编辑:它有意广泛,因为我知道有很多不同的技术可以做到这一点。 检查的答案有我想要的。

米勒拉宾Primality测试准确性

我知道Miller-Rabin素性测试是概率性的。 但是,我想将它用于编程任务 ,不会留下任何错误。 如果输入数字是64位整数(即C long long ),我们可以假设它是非常高的概率吗?

使用C语言的openssl库进行简单的AES加密解密

我想加密一个包含少量String的结构,然后解密它。 我尝试了以下代码。 原始代码可以从网上找到,它运行得很好。 我将它的输入更改为结构。 以下是代码。 #include #include #include #include #include #include typedef struct ticket { /* test field */ int ticketId; char username[20]; char date[20]; } USR_TICKET; // a simple hex-print routine. could be modified to print 16 bytes-per-line static void hex_print(const void* pv, size_t len) { const unsigned char * p = (const unsigned […]

OpenSSL AES 256 CBC通过EV中的EVP api

我要做的是:在C中编写一个程序,打开一个任意大小的文件并读取其内容。 一旦读取内容,它将在AES 256 CBC中对它们进行加密,并将密文保存到名为密文的文件中。 保存后,它将关闭这两个文件。 然后将打开刚刚保存的文件中的密文并解密密文并将其保存到名为decrypted的文件中。 我的问题:似乎永远不会解密我的密文。 我得到垃圾,我不知道我做错了什么。 请帮忙。 #include #include #include #include #include void encrypt(FILE *ifp, FILE *ofp) { //Get file size fseek(ifp, 0L, SEEK_END); int fsize = ftell(ifp); //set back to normal fseek(ifp, 0L, SEEK_SET); int outLen1 = 0; int outLen2 = 0; unsigned char *indata = malloc(fsize); unsigned char *outdata = malloc(fsize*2); […]