python模拟Web.API 中btoa进行Base64加密
最近在项目中遇到一个问题,就是爬取网页的时候,遇到一段JS是使用window.btoa对String进行Base64加密的。
其返回的结果为
MUc+fPQ+sCelBAWN4OMynmYUeUfqKGNhZqTApQuumy0W0b0gLMFLyaTzS72hTtyUO3XKYRtJ2YZGrOiMr7odkRxMsjNCWBqkpr04zmFXy7cQlP6pTd3dz3bKZiZHOhI
uUDGBvHFTPVs9udvMFxUpJWBypAbAFwRhNodYUzp8ORQ=
在Python中的execjs库无法使用 Web.API 所以只能自己进行加密来解决问题。
但使用execjs返回的Str为乱码
1G>|ô>°\\'¥àã2fyGê(caf¤À¥®-ѽ ,ÁKɤóK½¡NÜ;uÊaIÙF¬è¯ºL²3BX¤¦½8ÎaWË·þ©MÝÝÏvÊf&G:.P1¼qS=[=¹ÛÌ)%`r ¤Àa6XS:|9
如直接对这段Str转bytes再进行Base64加密这返回数据为
MUc+fMO0PsKwJ8KlBAXCjcOgw6Mywp5mFHlHw6ooY2FmwqTDgMKlC8KuwpstFsORwr0gLMOBS8OJwqTDs0vCvcKhTsOcwpQ7dcOKYRtJw5nChkbCrMOowozCr8K6HcK
RHEzCsjNCWBrCpMKmwr04w45hV8OLwrcQwpTDvsKpTcOdw53Dj3bDimYmRzoSLlAxwoHCvHFTPVs9wrnDm8OMFxUpJWBywqQGw4AXBGE2wodYUzp8ORQ=
可以看得出明显比btoa转换出来的要长的多。但后来发现是转换的时候编码设置问题
str.encode('latin1')
对着Str这种方式转Bytes再加密Base64就对了。
b'MUc+fPQ+sCelBAWN4OMynmYUeUfqKGNhZqTApQuumy0W0b0gLMFLyaTzS72hTtyUO3XKYRtJ2YZGrOiMr7odkRxMsjNCWBqkpr04zmFXy7cQlP6pTd3dz3bKZiZHOhIuUDGBvHFTPVs9udvMFxUpJWBypAbAFwRhNodYUzp8ORQ='