小编011*_*110的帖子

在Crypto ++中加载PEM编码的私有RSA密钥

通常,用户将具有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 ++进行转换,以便用户可以提供格式和"正常工作".谢谢你的建议.

c++ encryption cryptography rsa crypto++

12
推荐指数
1
解决办法
6694
查看次数

C++ 11正确的结构初始化

在C++ 11中有这样的结构:

struct von
{
    std::string Name;
    unsigned int ID;
    std::vector<std::string> Checks;
};
Run Code Online (Sandbox Code Playgroud)

它应该像这样初始化:

    von v = {"",0,{}};
Run Code Online (Sandbox Code Playgroud)

或者像这样:

    von v = {};
Run Code Online (Sandbox Code Playgroud)

两种方式似乎都有效,但编译器在后一个示例中警告-Wmissing-field-initializers.

编辑:这是我的编译器选项:g ++ main.cpp -ansi -Wall -Wextra -Weffc ++ -std = c ++ 0x.我正在使用g ++(Debian 4.6.2-12)4.6.2

c++ c++11

10
推荐指数
1
解决办法
2万
查看次数

在Python ElementTree中的Case Insensitive findall

我必须解析具有可能在任何情况下(混合,上,下等)的标记名称的XML,并且我不知道事先会是什么情况.如何在ElementTree中使findall完全不区分大小写?

   # Does not work
   variables = message.findall("VaRiAbLE")
Run Code Online (Sandbox Code Playgroud)

python xml

6
推荐指数
1
解决办法
3235
查看次数

用于保存原始数据的std :: string或std :: vector <char>

我希望这个问题适用于stackoverflow ...将原始数据字节(8位)std::string存储在一个而不是存储在其中的区别是什么std::vector<char>.我正在读取文件中的二进制数据并将这些原始字节存储在a中std::string.这很有效,这样做没有任何问题或问题.我的程序按预期工作.但是,其他程序员更喜欢这种std::vector<char>方法并建议我停止使用,std::string因为它对原始字节不安全.所以我想知道为什么std::string用来保存原始数据字节会不安全?我知道std::string最常用于存储ASCII文本,但是一个字节是一个字节,所以我不明白它的偏好std::vector<char>.

谢谢你的建议!

c++ string

6
推荐指数
2
解决办法
5418
查看次数

提升属性树

我正在使用boost属性树迭代XML文档并将结果存储在结构中.我遇到的问题是我只能访问第一个"项目"节点,无法访问第二个"项目"节点.我希望有人能指出我犯了错误的地方.

我的程序输出看起来像这样(你可以看到项目丢失..没有显示cookie2,candy2或chocolate2项目):

jar : snAcks
snack : coOkie
item : cooKie1
snack : canDy
item : caNdy1
snack : cHocolate
item : choColate1
Run Code Online (Sandbox Code Playgroud)

这是xml文件:

<root>
    <jar name="snAcks">
        <snack name="coOkie">
           <item name="cooKie1"></item>
           <item name="cookIe2"></item>
        </snack>
        <snack name="canDy">
           <item name="caNdy1"></item>
           <item name="candY2"></item>
        </snack>
        <snack name="cHocolate">
           <item name="choColate1"></item>
           <item name="chocOlate2"></item>
        </snack>
    </jar>
</root>
Run Code Online (Sandbox Code Playgroud)

这是源代码:

void parse_xml( boost::property_tree::iptree const& pt )
{
    BOOST_FOREACH( boost::property_tree::iptree::value_type const& v, pt.get_child("root.jar") )
    {
        // Show jar
        if ( boost::iequals( v.first, "<xmlattr>" ) )
        {
            std::cout << "jar : …
Run Code Online (Sandbox Code Playgroud)

xml boost boost-propertytree

4
推荐指数
1
解决办法
6872
查看次数

设置检测插入失败

有没有一种简单的方法来检测何时没有发生插入插入,因为插入的项目已经存在于集合中?例如,我想向用户显示一条消息,显示插入失败,以便他们可以更轻松地查找和删除其数据中的重复项.这里有一些伪代码来演示我想要做的事情:

try
{
   items.insert(item)
}

catch insert_failed_item_already_in_set
{
   // show user the failed item
}
Run Code Online (Sandbox Code Playgroud)

c++ set stdset

4
推荐指数
3
解决办法
1万
查看次数

Boost dynamic_bitset - 将整数值放入一系列位中

我有一个 7 字节/56 位位集,在构造时将第一位设置为 1:

boost::dynamic_bitset<> b(56, 1);
Run Code Online (Sandbox Code Playgroud)

构造完成后,我想将一个整数值(比如 2019)放入第 4 位到第 15 位中。我很好奇 boost 中是否有一种简单的方法可以在不进行按位运算的情况下实现此目的?基本上,我想将一系列位设置为一个整数值,我知道该整数值足够小以适合这些位。感谢您的任何建议。

c++ boost bit bitset boost-dynamic-bitset

3
推荐指数
1
解决办法
2366
查看次数

C++从函数返回double或int

我有一个函数,它采用完全相同的args,但有时我希望它返回一个double,其他时候我想它返回一个int.这样做的正确方法是什么?

我可以执行函数重载,但重载函数的声明必须通过参数列表中的参数类型和/或数量彼此不同.这些是相同的,所以函数重载不适用(我不认为).

double calc( int value, int add, double mult )
{
     // Sometimes I want this to return int. Sometimes double.
     return (value + add) * mult;
}
Run Code Online (Sandbox Code Playgroud)

当我想要的类型或写两个函数时,我宁愿不转换为int(一个用于int,另一个用于双精度).谢谢你的建议.

c++

0
推荐指数
2
解决办法
1万
查看次数

Python和Floats - 仅打印整数

Python中是否有一种方法只能在不需要额外精度来表示数字的情况下打印浮点数的整数部分?例如,浮点数1.0.其他一些语言默认执行此操作.这里有些例子:

在C++中,此代码打印1而不是1.0:

int main()
{ 
    float f = 1.0;
    std::cout << f << "\n";

    return 0;
}

./a.out 
1
Run Code Online (Sandbox Code Playgroud)

但是,在Python中,此代码打印1.0:

f = 1.0

print type(f)
<type 'float'>

print f
1.0
Run Code Online (Sandbox Code Playgroud)

我希望Python代码只打印1而不是1.0,只需要完全代表数字即可.

c++ python floating-point

0
推荐指数
1
解决办法
3231
查看次数