如何为Base32类使用不同的字母表?

2024-04-19 04:11:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在python上执行以下操作:

encoded = base64.b32encode("1ACC64E9510C32CE8E34".decode('hex'))

我得到DLGGJ2KRBQZM5DRU。使用Crypto++时:

^{pr2}$

我得到DMGGJ4MTBS3N7DTW哪个是错的。在

有没有一种方法可以用c++对上面的字符串进行编码并得到与python相同的结果?在


Tags: 方法字符串编码cryptodecodehexencodedbase64
1条回答
网友
1楼 · 发布于 2024-04-19 04:11:08

我找到了完美的解决方案github

static const CryptoPP::byte ALPHABET[]          = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; // Most libraries use RFC4648.

const std::string decode( const std::string& encoded )
{
    std::string decoded;

    static int decoding_array[256];
    CryptoPP::Base32Decoder::InitializeDecodingLookupArray(decoding_array, 
                               ALPHABET, 
                               32, 
                               true); // false = case insensitive

    CryptoPP::Base32Decoder b32decoder;
    CryptoPP::AlgorithmParameters dp = CryptoPP::MakeParameters(
                                       CryptoPP::Name::DecodingLookupArray(),
                                       (const int *)decoding_array,
                                       false);
    b32decoder.IsolatedInitialize(dp); 

    b32decoder.Attach( new CryptoPP::StringSink( decoded ) );
    b32decoder.Put( (std::uint8_t*)encoded.c_str(), encoded.size() );
    b32decoder.MessageEnd();

    return decoded;
}

我希望投我一票的人也能看到这一点。 作为一个整体,我对crypto++和密码学非常陌生。在

相关问题 更多 >