Skip to content

Instantly share code, notes, and snippets.

@Saakshaat
Last active April 25, 2021 18:46
Show Gist options
  • Save Saakshaat/a1cd65ee48061cb1aeceb15286e9cf09 to your computer and use it in GitHub Desktop.
Save Saakshaat/a1cd65ee48061cb1aeceb15286e9cf09 to your computer and use it in GitHub Desktop.
JWT Generator
import json
import base64
import secrets
import hmac
import hashlib
# secret = 'SECRET' # uncomment this if you want constant secret
def jwt_gen(message, alg):
def base64UrlEncode(j):
s = json.dumps(j)
return base64.urlsafe_b64encode(s.encode('utf-8'))
def sign_rs():
pass
def sign_hs(e_h, e_p):
secret = secrets.token_bytes(256)
key = (e_h.decode() + '.' + e_p.decode()).encode('utf-8')
signature = hmac.new(secret, key, hashlib.sha256).digest()
return signature, secret
alg_func = {
'RS256': sign_rs,
'HS256': sign_hs,
}
header = {
"alg": alg,
"typ": "JWT"
}
payload = {
"msg": message
}
en_header = base64UrlEncode(header)
en_payload = base64UrlEncode(payload)
signature, secret = alg_func[alg](en_header, en_payload)
print(f'Signature: {signature}')
print(f'Secret: {secret}')
print(en_header.decode() + '.' + en_payload.decode() + '.' + signature.decode())
import os
from encrypt import jwt_gen
jwt, secret = jwt_gen('Hello World!', 'HS256')
os.environ['HS256_JWT'] = jwt
os.environ['HS256_SECRET'] = secret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment