我在C:\ cryptopp中下载并提取了Crypto ++.我使用Visual Studio Express 2012来构建内部的所有项目(按照自述文件中的说明),并且所有内容都已成功构建.然后我在其他文件夹中创建了一个测试项目,并添加了cryptolib作为依赖项.之后,我添加了包含路径,因此我可以轻松地包含所有标题.当我尝试编译时,我收到有关未解析符号的错误.
为了解决这个问题,我添加C:\cryptopp\Win32\Output\Debug\cryptlib.lib
了链接其他依赖项.现在我收到这个错误:
Error 1 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(cryptlib.obj) CryptoTest
Error 2 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(iterhash.obj) CryptoTest
Error 3 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in program.obj C:\Data\Work\C++ VS\CryptoTest\CryptoTest\cryptlib.lib(sha.obj) CryptoTest
Error 4 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' …
Run Code Online (Sandbox Code Playgroud) 我一直在互联网上搜索好的 c ++ AES代码示例/教程,它教授加密技术的基础知识和库的使用,但到目前为止,我没有运气得到不错的材料.
好:易于理解(只是随时随地学习的基础知识).
我需要一个如何使用Crypto ++从std :: string生成SHA256哈希并输出std :: string的示例.我似乎无法弄明白.我尝试的一切都给了我无效的输出.
这是interjay回答后的新代码:
string SHA256(string data)
{
byte const* pbData = (byte*) data.data();
unsigned int nDataLen = data.size();
byte abDigest[CryptoPP::SHA256::DIGESTSIZE];
CryptoPP::SHA256().CalculateDigest(abDigest, pbData, nDataLen);
return string((char*)abDigest);
}
Run Code Online (Sandbox Code Playgroud)
SHA256的输出("A"); 是
如何将其转换为可读格式?
感谢interjay的回答,我能够生成最终的哈希值.
背景
我正在设计一个系统,该系统能够为静态Web内容的用户开发动态认证方案.其动机是预先生成大量复杂的生成但敏感的Web内容,然后通过基于cookie(嵌入可逆加密信息)的身份验证进行静态服务,由Web服务器强制执行.使用AEAD模式加密原语.
问题
我需要生成一段时间有效的IVEC和密钥,比如一周(当前有效对).并且过去的IVEC /密钥也有效期为2周(历史上有效),并且使用历史有效秘密加密的任何数据将仅使用当前有效的IVEC/KEY重新加密.
我需要的是一个确定性的CSPRNG,即随机数和密码短语的种子,它可以以索引方式产生64位或128位数字块.如果我使用一周以来 - "1970年1月1日"作为我假设的CSPRNG的索引元素之一,我应该能够构建一个随着时间的推移自动更改密钥的系统.
我正在考虑的方法
现在我没有在cryptopp中看到这样的功能,或者我现在已经足够了解术语,并且由于cryptopp是最先进的加密库,我没有信心我会找到另一个.所以,如果我找不到实现,我应该自己动手.是否会从连接数据中生成静态字符串结构然后对其进行散列(如下所示)?
RIPEMD160(RandomPreGeneratedFixedNonce:密码短语:UInt64SinceEpoch:128BitBlockIndexNumber);
注意:块编号将被分配并具有常规结构,因此例如对于128位摘要,块0的前64位将用于ivec,而所有元素1用于128位密钥.
这是一种合理的方法( - .,加密安全)吗?
- 编辑:发表接受评论 -
经过一些反思后,我决定将我最初认为密码和nonce/salt的内容合并为一个16字节(加密强)密钥,并使用PKCS#5中概述的技术来导出多个基于时间的密钥.不需要盐,因为不使用密码短语.
我有一个使用Crypto ++进行一些散列函数的项目.最近,我决定清理一下并在MSVC++上使用警告级别4.
这是我的源代码:
#pragma warning(push)
#pragma warning(disable: 4100) //Unreferenced formal parameter
#pragma warning(disable: 4244) //Conversion, possible loss of data
#pragma warning(disable: 4512) //Assignment operator could not be generated
#pragma warning(disable: 4127) //Conditional expression is constant
#pragma warning(disable: 4505) //Unreferenced local function has been removed
#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
#include <cryptopp/md5.h>
#include <cryptopp/sha.h>
#pragma warning(pop)
Run Code Online (Sandbox Code Playgroud)
尽管如此disable: 4505
,我仍然得到这个警告:
c:\cppdev\cryptopp561\cryptopp\misc.h(548): warning C4505: 'CryptoPP::StringNarrow' : unreferenced local function has been removed
Run Code Online (Sandbox Code Playgroud)
而我的项目没有建立.
我该如何解决这个问题?基本上,我只想禁用第三方代码的警告; 如果我可以避免这样做,我不想编辑cryptopp本身来修复错误.
通常,用户将具有PEM编码的RSA私钥.Crypto ++要求这些密钥以DER格式加载.我一直要求人们事先使用openssl手动将他们的PEM文件转换为DER:
openssl pkcs8 -in in_file.pem -out out_file.der -topk8 -nocrypt -outform der
Run Code Online (Sandbox Code Playgroud)
这很好,但有些人不明白如何做到这一点,也不想做.所以我想在程序中自动将PEM文件转换为DER文件.
从PEM中剥离"----- BEGIN CERTIFICATE -----"和"----- END CERTIFICATE -----"还是一样简单,还是需要进行其他一些转换?我被告知在这些标记之间它只是b64编码的DER.以下是一些演示此问题的代码:
// load the private key
CryptoPP::RSA::PrivateKey PK;
CryptoPP::ByteQueue bytes;
try
{
CryptoPP::FileSource File( rsa.c_str(), true, new CryptoPP::Base64Decoder() );
File.TransferTo( bytes );
bytes.MessageEnd();
// This line Causes BERDecodeError when a PEM encoded file is used
PK.Load( bytes );
}
catch ( CryptoPP::BERDecodeErr )
{
// Convert PEM to DER and try to load the key again
}
Run Code Online (Sandbox Code Playgroud)
我想避免对openssl进行系统调用,并完全使用Crypto ++进行转换,以便用户可以提供格式和"正常工作".谢谢你的建议.
我下载了http://www.cryptopp.com/#download 5.6.1并且没有任何线索可以做到这一点.我是一个完全的菜鸟,需要很好的指导.谢谢.
我在c ++ linux中使用crypto ++.这是我的简单代码:
#include <iostream>
#include <fstream>
#include <string.h>
#include "crypto++/cryptlib.h"
#include "crypto++/modes.h"
#include "crypto++/filters.h"
#include "crypto++/aes.h"
#include "crypto++/osrng.h"
#include "crypto++/strciphr.h"
using namespace std;
using namespace CryptoPP;
ifstream::pos_type size;
char * memblock;
int length;
char * _iv[AES::BLOCKSIZE];
char * keys[AES::MAX_KEYLENGTH];
void encriptCTR(byte * outbyte, const byte * inbyte, const byte * key, const byte * iv);
void encriptCTR(byte * outbyte, const byte * inbyte, const byte * key, const byte * iv)
{
size_t inbyte_len = strlen((const char *)inbyte); …
Run Code Online (Sandbox Code Playgroud) 我从Crypto ++ Here下载.我找到了一些用visual studio构建它的方法.所以我不知道如何将它用于我们的jni或Ndk的Android应用程序.
我尝试使用apt-get:安装Crypto ++ sudo apt-get install libcrypto++-dev libcrypto++-doc libcrypto++-utils
.然后我尝试编译非常简单的程序,如:
#include <iostream>
#include "aes.h"
#include "modes.h"
using namespace std;
using namespace CryptoPP;
int main()
{
cout << "Yo, man!" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它导致了fatal error: aes.h: No such file or directory
.
我是一个新的Ubuntu用户(Windows之前),所以我做了一些研究,但是大多数人说输入一个命令足以获得Crypto ++库的存储库并使其工作.嗯,这不是我的情况.
crypto++ ×10
c++ ×9
hash ×3
compilation ×2
cryptography ×2
sha256 ×2
android ×1
android-ndk ×1
c ×1
encryption ×1
rsa ×1
secret-key ×1
stdstring ×1
ubuntu ×1
visual-c++ ×1