我的服务器在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是导致问题的原因。
答案 0 :(得分:0)
当我阅读他们的源代码时,我可以说PyCrypto和Crypto ++都是用于Python和C ++加密的完美库。问题是我在加密数据前面加上一些关于文件的元信息,我完全忘记了这一点,在客户端Crypto ++处理这些元数据后解密了我的文件。
由于我没有在任何地方(甚至在维基百科中)都没有明确记录,我在这里写下: Nonce,IV和Counter的任何组合(如串联,xor或like)都适用于CTR模式,但大多数库实现的标准是按顺序连接这些值。因此,分组密码算法中使用的值通常是:Nonce + IV + Counter。而计数器通常从1开始(不是0)。