c语言将十进制转化为二进制算法_base64算法初探即逆向分析
算法分析
雖說base64嚴格意義上來說并不能算是加密算法,但的確應用方面來說還算是比較廣,在CTF的算法逆向中Base系列算是也比較常見的,萌新剛開始學算法,就以base64為例,對該算法進行一個簡單的分析。
簡單來說,base64算法就是根據一個base64表,將原始字符的值一一替換。替換規則如下:
表格如下:
定義為字符串數組如下:
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"如果需要編碼的字節不能被三整除,則會多出1個或2個字節,處理方式是加上"="號,也就是平時我們看到的base64編碼最后的"="或者"=="
代碼實現
根據前面的算法分析,已經知道了base64具體的算法實現,接下來使用c語言實現它。
首先需要定義一個base64的字符串數組,用于替換。
還是回到這張圖
首先我們需要將第一個字母G的二進制位從8位截取到6位,我能想到的最直接的方法就是直接移位,將G>>2,前面自動補0則會得到00010001,也就是索引17,對應base64的表格得到字母R,第一個字母就替換完成了。
很明顯編碼的第二個值是由G的最后兩個二進制位和u的前面四個二進制位拼接起來的,也就是說接下來應該將這兩部分組合起來。
如何得到第一個字母的最后兩個字節呢,也是采用移位的方式:
首先將第一個字母左移4位得到01110000,我們這里需要取第一位的最后兩位,也就是這里的第三四位。所以將01110000與0x30(十進制48,二進制00110000)得到:
接下來將第二個字節的前四個二進制位拼接過來即可。
同樣的,先將第二個字節右移四位以此得到需要拼接的部分。然后以類似的思路處理第三個字節。處理完畢將會得到新的四個字符。
完整流程大致如下:
完整代碼如下:
同理,解密函數需要四個字節一次性處理,邏輯一樣。
我使用了原生的c語言實現,代碼如下:
在main函數中調用:
結果如下:
將結果拿到base64網頁解密:
通過分析過程,我們可以得知base64加解密中我們可控制也最方便控制的是base64的加密表。我們修改base64的加密表即可以實現base64的變異加密,實現起來非常很簡單。
將之前的base_table修改為如下:
before:
然后運行程序即可得到:
然后到網絡上使用base64解密工具進行解密將解密失敗。
本文由看雪論壇 顧何 原創
原文鏈接:[原創]base64算法初探即逆向分析-『密碼算法』-看雪安全論壇
總結
以上是生活随笔為你收集整理的c语言将十进制转化为二进制算法_base64算法初探即逆向分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: antd option宽度自适应_建议收
- 下一篇: java list 初始化_Java新特