2016-08-29 75 views
0

我讀到這個article關於海盜灣的祕密AES加密信息正在解決。 (這是舊消息)如何使用AES加密來加密郵件?

求解器在他的linux終端中使用這個命令來解密消息。

echo "JyO7wNzc8xht47QKWohfDVj6Sc2qH+X5tBCT+uetocIJcjQnp/2f1ViEBR+ty0Cz" | openssl aes-128-cbc -K $(printf wearetpb | sha256sum | head -c 32 | tr '[:lower:]' '[:upper:]') -nosalt -nopad -iv 0 -base64 -d -p 

的decrpyted消息是鏈接:https://www.youtube.com/watch?v=-YEG9DgRHhA


我想encrpyt自己的自定義消息的方式海盜灣做相同。我想我需要將加密的文本更改爲我的自定義消息,並將命令更改爲加密,而不是解密。但我該怎麼做?

+0

不要忘記使用另一個鍵。 – Daniel

回答

1

它應該是簡單:

echo -n "https://stackoverflow.com/q/39197703/5128464" | openssl aes-128-cbc -K $(printf wearetpb | sha256sum | head -c 32 | tr '[:lower:]' '[:upper:]') -nosalt -iv 0 -e -base64 

給予密文:

l3iwQZrEe8R55MQMu13Hn2S+MvKs46fLT6rVP3yiJqvCPwAzJLrnZph1fYX1qDkk 

其然後可以被解密(使用相同的技術,密鑰等):

echo "l3iwQZrEe8R55MQMu13Hn2S+MvKs46fLT6rVP3yiJqvCPwAzJLrnZph1fYX1qDkk" | openssl aes-128-cbc -K $(printf wearetpb | sha256sum | head -c 32 | tr '[:lower:]' '[:upper:]') -nosalt -nopad -iv 0 -base64 -d 

回覆明文:

https://stackoverflow.com/q/39197703/5128464 

但是,如果仔細觀察原始解密文本(即,轉儲實際的消息字節):

echo "JyO7wNzc8xht47QKWohfDVj6Sc2qH+X5tBCT+uetocIJcjQnp/2f1ViEBR+ty0Cz" | openssl aes-128-cbc -K $(printf wearetpb | sha256sum | head -c 32 | tr '[:lower:]' '[:upper:]') -nosalt -nopad -iv 0 -base64 -d | xxd -g1 

你得到這個(請注意,在輸出端五「00」字節):

0000000: 68 74 74 70 73 3a 2f 2f 77 77 77 2e 79 6f 75 74 https://www.yout 
0000010: 75 62 65 2e 63 6f 6d 2f 77 61 74 63 68 3f 76 3d ube.com/watch?v= 
0000020: 2d 59 45 47 39 44 67 52 48 68 41 00 00 00 00 00 -YEG9DgRHhA..... 

如果你重複相同的一個結果:

echo "l3iwQZrEe8R55MQMu13Hn2S+MvKs46fLT6rVP3yiJqvCPwAzJLrnZph1fYX1qDkk" | openssl aes-128-cbc -K $(printf wearetpb | sha256sum | head -c 32 | tr '[:lower:]' '[:upper:]') -nosalt -nopad -iv 0 -base64 -d | xxd -g1 

你得到不同的結局(這時候有五 '05' 字節):

0000000: 68 74 74 70 3a 2f 2f 73 74 61 63 6b 6f 76 65 72 http://stackover 
0000010: 66 6c 6f 77 2e 63 6f 6d 2f 71 2f 33 39 31 39 37 flow.com/q/39197 
0000020: 37 30 33 2f 35 31 32 38 34 36 34 05 05 05 05 05 703/5128464..... 

這些字節被稱爲padding bytes並且必須作爲AES cipher加入CBC mode不能處理長度不是N * 128位的消息(即,不能被劃分成16個字節塊)

在原始明文(即00 00 00 00 00使用的填充)是一個zero padding,但第二個(04 04 04 04)是PKCS7填充。

不幸的是零填充不直接支持OpenSSL的命令行工具,所以你必須手動添加它(請注意添加零個字節和一個額外的-nopad選項):

echo -ne "https://stackoverflow.com/q/39197703/5128464\0\0\0\0\0" | openssl aes-128-cbc -K $(printf wearetpb | sha256sum | head -c 32 | tr '[:lower:]' '[:upper:]') -nosalt -nopad -iv 0 -e -base64 

,並提供:

l3iwQZrEe8R55MQMu13Hn2S+MvKs46fLT6rVP3yiJquYbIGPlGOBxJxJmU/bXocR 

您可以檢查新明文填充有:

echo "l3iwQZrEe8R55MQMu13Hn2S+MvKs46fLT6rVP3yiJquYbIGPlGOBxJxJmU/bXocR" | openssl aes-128-cbc -K $(printf wearetpb | sha256sum | head -c 32 | tr '[:lower:]' '[:upper:]') -nosalt -nopad -iv 0 -base64 -d | xxd -g1 

要查看填充現在是正確的:

0000000: 68 74 74 70 3a 2f 2f 73 74 61 63 6b 6f 76 65 72 http://stackover 
0000010: 66 6c 6f 77 2e 63 6f 6d 2f 71 2f 33 39 31 39 37 flow.com/q/39197 
0000020: 37 30 33 2f 35 31 32 38 34 36 34 00 00 00 00 00 703/5128464..... 

如果你想生成殼填充,例如見here(在EDIT3下)。

祝你好運!