python模拟Web.API 中btoa进行Base64加密

最近在项目中遇到一个问题,就是爬取网页的时候,遇到一段JS是使用window.btoa对String进行Base64加密的。

其返回的结果为

MUc+fPQ+sCelBAWN4OMynmYUeUfqKGNhZqTApQuumy0W0b0gLMFLyaTzS72hTtyUO3XKYRtJ2YZGrOiMr7odkRxMsjNCWBqkpr04zmFXy7cQlP6pTd3dz3bKZiZHOhI
uUDGBvHFTPVs9udvMFxUpJWBypAbAFwRhNodYUzp8ORQ=

在Python中的execjs库无法使用 Web.API 所以只能自己进行加密来解决问题。

但使用execjs返回的Str为乱码

1G>|ô>°\\'¥àã2žfyGê(caf¤À¥®›-ѽ ,ÁKɤóK½¡Nܔ;uÊaIنF¬èŒ¯º‘L²3BX¤¦½8ÎaWË·”þ©MÝÝÏvÊf&G:.P1¼qS=[=¹ÛÌ)%`r
¤Àa6‡XS:|9

  如直接对这段Str转bytes再进行Base64加密这返回数据为

MUc+fMO0PsKwJ8KlBAXCjcOgw6Mywp5mFHlHw6ooY2FmwqTDgMKlC8KuwpstFsORwr0gLMOBS8OJwqTDs0vCvcKhTsOcwpQ7dcOKYRtJw5nChkbCrMOowozCr8K6HcK
RHEzCsjNCWBrCpMKmwr04w45hV8OLwrcQwpTDvsKpTcOdw53Dj3bDimYmRzoSLlAxwoHCvHFTPVs9wrnDm8OMFxUpJWBywqQGw4AXBGE2wodYUzp8ORQ=

  可以看得出明显比btoa转换出来的要长的多。但后来发现是转换的时候编码设置问题

str.encode('latin1')

对着Str这种方式转Bytes再加密Base64就对了。

 

b'MUc+fPQ+sCelBAWN4OMynmYUeUfqKGNhZqTApQuumy0W0b0gLMFLyaTzS72hTtyUO3XKYRtJ2YZGrOiMr7odkRxMsjNCWBqkpr04zmFXy7cQlP6pTd3dz3bKZiZHOhIuUDGBvHFTPVs9udvMFxUpJWBypAbAFwRhNodYUzp8ORQ='

posted @ 2018-08-10 17:07  JokerWu  阅读(1384)  评论(0编辑  收藏  举报