Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
|Build Status| |Coveralls| |PyPI|
A Python module for base62
encoding. Ported from PHP code that I wrote
in mid-2000, which can be found
here <http://philosophical.one/posts/base62>
__.
.. |Build Status| image:: https://github.com/suminb/base62/actions/workflows/ci.yml/badge.svg :target: https://github.com/suminb/base62/actions/workflows/ci.yml?query=branch%3Adevelop .. |PyPI| image:: https://img.shields.io/pypi/v/pybase62.svg :target: https://pypi.python.org/pypi/pybase62 .. |Coveralls| image:: https://coveralls.io/repos/github/suminb/base62/badge.svg?branch=master :target: https://coveralls.io/github/suminb/base62?branch=develop
When writing a web application, often times we would like to keep the URLs short.
::
http://localhost/posts/V1Biicwt
This certainly gives a more concise look than the following.
::
http://localhost/posts/109237591284123
This was the original motivation to write this module, but there shall be much
more broader potential use cases of this module. The main advantage of
base62
is that it is URL-safe (as opposed to base64
) due to the lack of
special characters such as '/
' or '=
'. Another key aspect is that the
alphabetical orders of the original (unencoded) data is preserved when encoded.
In other words, encoded data can be sorted without being decoded at all.
base62
can be installed via pypi
. Unfortunately, the package name
base62
on pypi
had already been occupied by someone else, so we had to
go by pybase62
.
::
pip install pybase62
Alternatively, you may clone the code to manually install it.
::
git clone https://github.com/suminb/base62
cd base62 && python setup.py install
The following section describes a basic usage of base62
.
.. code:: python
>>> import base62
>>> base62.encode(34441886726)
'base62'
>>> base62.decode('base62')
34441886726
From version 0.2.0
, base62
supports bytes
array encoding as well.
.. code:: python
>>> base62.encodebytes(b'\0')
0
>>> base62.encodebytes(b'\xff\xff')
H31
>>> base62.decodebytes('0')
b''
>>> base62.decodebytes('1')
b'\x01'
Some may be inclined to assume that they both take bytes
types as input
due to their namings. However, encodebytes()
takes bytes
types
whereas decodebytes()
takes str
types as an input. They are intended
to be commutative, so that a roundtrip between both functions yields the
original value.
Formally speaking, we say function f and g commute if f∘g = g∘f where f(g(x)) = (f∘g)(x).
Therefore, we may expect the following relationships:
value == encodebytes(decodebytes(value))
value == decodebytes(encodebytes(value))
You may run some test cases to ensure all functionalities are operational.
::
pytest -v
If pytest
is not installed, you may want to run the following command:
::
pip install -r tests/requirements.txt
Deploy a source package (to pypi <https://pypi.org>
_) as follows:
::
python setup.py sdist upload
FAQs
Python module for base62 encoding
We found that pybase62 demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.