使用cryptopp解密使用PyCrypto加密的密文

时间:2016-06-23 15:54:09

标签: python pycrypto crypto++

我的服务器在CTR模式下使用带有AES的pycrypto加密文件。我的柜台是这样一个简单的柜台:

Private Sub Worksheet_Change(ByVal SourceA As Range)
    Dim TargetB As Range
    Dim SheetACalendar As Range
    Dim SheetBCalendar As Range
    Dim project As String

    With ThisWorkbook
      Set SheetACalendar = .Sheets("SheetA").Range(Cells(1, 12), Cells(1, 47)) 'Jan=14 thru Dec=47
      Set SheetBCalendar = .Sheets("SheetB").Range(Cells(1, 1), Cells(1, 49)) 'Jan=38 thru Dec=49
    End With

    'Only Update SheetB if the changed cell (SourceA) is a summary row
    'Identify the project, lookup on sheetB and update the correct months value to match the change in SheetA
    If Cells(SourceA.Row, 3) = "Total" And (SourceA.Column = 14 Or SourceA.Column = 17 Or SourceA.Column = 20 Or SourceA.Column = 23 Or SourceA.Column = 26 Or SourceA.Column = 29 Or SourceA.Column = 32 Or SourceA.Column = 35 Or SourceA.Column = 38 Or SourceA.Column = 41 Or SourceA.Column = 44 Or SourceA.Column = 47) Then
        project = Cells(SourceA.Row, 1).Value
        TargetB = Range(SheetBCalendar).Find(project, Cells(1, 1), SearchOrder:=xlByRows)
        TargetB.Item(1, SourceA.Column) = SourceA.Value
    End If
End Sub

我想在我的客户端用c ++的cryptopp库解密密文。我该怎么办?

Python代码:

\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03
到目前为止

C ++代码:

encryptor = AES.new(
    CRYPTOGRAPHY_KEY,
    AES.MODE_CTR,
    counter=Counter.new(128),
)
cipher = encryptor.encrypt(plain_text)

但在运行此byte ctr[] = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" mDecryptor = new CryptoPP::CTR_Mode<CryptoPP::AES>::Decryption(key, 32, ctr); std::string plain; CryptoPP::StringSource(std::string(data, len), true, new CryptoPP::StreamTransformationFilter(*mDecryptor, new CryptoPP::StringSink(plain))); 之后是垃圾。

更新

您可以尝试使用crypto ++解密的示例加密数据,这样即使您不了解python并且您只是熟悉crypto ++,您也可以帮助我:

尝试解密此base64编码文本:

plain

使用此键:

2t0lLuSBY7NkfK5I4kML0qjcZl3xHcEQBPbDo4TbvQaXuUT8W7lNbRCl8hfSGJA00wgUXhAjQApcuTCZckb9e6EVOwsa+eLY78jo2CqYWzhGez9zn0D2LMKNmZQi88WuTFVw9r1GSKIHstoDWvn54zISmr/1JgjC++mv2yRvatcvs8GhcsZVZT8dueaNK6tXLd1fQumhXCjpMyFjOlPWVTBPjlnsC5Uh98V/YiIa898SF4dwfjtDrG/fQZYmWUzJ8k2AslYLKGs=

使用crypto ++在本文开头描述的计数器功能。如果您成功发布解密文本(仅包含数字)和解决方案,请

UPDATE2: 我没有在python代码中提供IV,python模块忽略了IV。我的IV是导致问题的原因。

1 个答案:

答案 0 :(得分:0)

当我阅读他们的源代码时,我可以说PyCrypto和Crypto ++都是用于Python和C ++加密的完美库。问题是我在加密数据前面加上一些关于文件的元信息,我完全忘记了这一点,在客户端Crypto ++处理这些元数据后解密了我的文件。

由于我没有在任何地方(甚至在维基百科中)都没有明确记录,我在这里写下: Nonce,IV和Counter的任何组合(如串联,xor或like)都适用于CTR模式,但大多数库实现的标准是按顺序连接这些值。因此,分组密码算法中使用的值通常是:Nonce + IV + Counter。而计数器通常从1开始(不是0)。