mirror of
https://git.linux-kernel.at/oliver/ivatar.git
synced 2025-11-11 18:56:23 +00:00
Compare commits
48 Commits
550b9bf0b9
...
cipher_tes
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
44a6b9a099 | ||
|
|
2163c60f5b | ||
|
|
0c68843849 | ||
|
|
92f495ebe0 | ||
|
|
39ff27984c | ||
|
|
f0a2d5aae4 | ||
|
|
cc761467f5 | ||
|
|
44e85365bc | ||
|
|
8c9b14ec0e | ||
|
|
88e6e5a80f | ||
|
|
aa3a7a2497 | ||
|
|
9a5bdf9364 | ||
|
|
01f0f29859 | ||
|
|
a80d704a59 | ||
|
|
63a4737717 | ||
|
|
5ec186e039 | ||
|
|
358b3cec8c | ||
|
|
bc3ce39a19 | ||
|
|
70ffb10d51 | ||
|
|
3797018139 | ||
|
|
c6601b60c0 | ||
|
|
26ae405899 | ||
|
|
a40f262ceb | ||
|
|
817984a43b | ||
|
|
84a265eca5 | ||
|
|
f53ad22524 | ||
|
|
abd9ccff7c | ||
|
|
1b70908f58 | ||
|
|
0fe50c6317 | ||
|
|
af98487c1d | ||
|
|
ccd72d5422 | ||
|
|
86bb77eb9d | ||
|
|
0f84845ca9 | ||
|
|
d9c33f7ee3 | ||
|
|
c04e5ad266 | ||
|
|
4cdb61724f | ||
|
|
507e623962 | ||
|
|
85ccf0f7be | ||
|
|
d2e28fe809 | ||
|
|
6c6afd5152 | ||
|
|
4db099156b | ||
|
|
870a2a2365 | ||
|
|
3f01e0c3e1 | ||
|
|
03bf496117 | ||
|
|
a573985248 | ||
|
|
c3214a9a2b | ||
|
|
29c8f17e06 | ||
|
|
c864c2f115 |
8
encrypted_proxy/README.md
Normal file
8
encrypted_proxy/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
The code in here should be able to help to build up some encrypting proxy.
|
||||
|
||||
If your app uses a lot of libravatar and therefore has to do a lot of DNS
|
||||
lookups, change your app in such a way, that it encodes the mail address,
|
||||
sends it over to the proxy, which will decrypt it, do the DNS lookup and
|
||||
return the image binary.
|
||||
|
||||
No guarantee for this code. It's untested and just provided as example.
|
||||
90
encrypted_proxy/lib/MyCypher.php
Normal file
90
encrypted_proxy/lib/MyCypher.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Valid encryption methods AES-256-CFB
|
||||
* Code kindly borrowed from:
|
||||
* https://github.com/arajapandi/php-python-encrypt-decrypt
|
||||
*
|
||||
* $cypher = new MyCypher($iv);
|
||||
* $php_encrypted = $cypher->encrypt('test');
|
||||
* $php_decrypted = $cypher->decrypt($php_encrypted);
|
||||
*/
|
||||
class MyCypher {
|
||||
|
||||
private $key = 'asdfa923aksadsYahoasdw998sdsads';
|
||||
private $iv = null;
|
||||
private $method = "AES-256-CFB";
|
||||
private $blocksize = 32;
|
||||
private $padwith = '`';
|
||||
|
||||
/*
|
||||
* construct for cypher class - get, set key and iv
|
||||
*/
|
||||
|
||||
function __construct($iv, $key = null) {
|
||||
|
||||
if (is_string($key)) {
|
||||
$this->key = $key;
|
||||
}
|
||||
|
||||
$this->iv = $iv;
|
||||
}
|
||||
|
||||
/*
|
||||
* get hased key - if key is not set on init, then default key wil be used
|
||||
*/
|
||||
|
||||
private function getKEY() {
|
||||
|
||||
if (empty($this->key)) {
|
||||
die('Key not set!');
|
||||
}
|
||||
|
||||
return substr(hash('sha256', $this->key), 0, 32);
|
||||
}
|
||||
|
||||
/*
|
||||
* get hashed IV value - if no IV values then it throw error
|
||||
*/
|
||||
|
||||
private function getIV() {
|
||||
|
||||
if (empty($this->iv)) {
|
||||
die('IV not set!');
|
||||
}
|
||||
|
||||
return substr(hash('sha256', $this->iv), 0, 16);
|
||||
}
|
||||
|
||||
/*
|
||||
* Encrypt given string using AES encryption standard
|
||||
*/
|
||||
|
||||
public function encrypt($secret) {
|
||||
|
||||
try {
|
||||
|
||||
$padded_secret = $secret . str_repeat($this->padwith, ($this->blocksize - strlen($secret) % $this->blocksize));
|
||||
$encrypted_string = openssl_encrypt($padded_secret, $this->method, $this->getKEY(), OPENSSL_RAW_DATA, $this->getIV());
|
||||
$encrypted_secret = base64_encode($encrypted_string);
|
||||
return $encrypted_secret;
|
||||
} catch (Exception $e) {
|
||||
die('Error : ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Decrypt given string using AES standard
|
||||
*/
|
||||
|
||||
public function decrypt($secret) {
|
||||
try {
|
||||
$decoded_secret = base64_decode($secret);
|
||||
$decrypted_secret = openssl_decrypt($decoded_secret, $this->method, $this->getKEY(), OPENSSL_RAW_DATA, $this->getIV());
|
||||
return rtrim($decrypted_secret, $this->padwith);
|
||||
} catch (Exception $e) {
|
||||
die('Error : ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
73
encrypted_proxy/lib/MyCypher.py
Normal file
73
encrypted_proxy/lib/MyCypher.py
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python2
|
||||
#encoding: UTF-8
|
||||
|
||||
# Code kindly borrowed from:
|
||||
# https://github.com/arajapandi/php-python-encrypt-decrypt
|
||||
|
||||
# Python Class for AES encryption
|
||||
"""
|
||||
Example Usage
|
||||
enc_str = cipher.encrypt('secret')
|
||||
enc_str = cipher.decrypt(enc_str)
|
||||
print(enc_str); #secret
|
||||
"""
|
||||
|
||||
from Crypto.Cipher import AES
|
||||
import base64
|
||||
import hashlib
|
||||
import sys
|
||||
|
||||
class MyCypher:
|
||||
# Default Key for encryption
|
||||
rawkey = 'asdfa923aksadsYahoasdw998sdsads'
|
||||
method = AES.MODE_CFB
|
||||
blocksize = 32 # 16, 32..etc
|
||||
padwith = '`'.encode('utf-8') # padding value for string
|
||||
|
||||
#lambda function for padding
|
||||
pad = lambda self, s: s + (self.blocksize - len(s) % self.blocksize) * self.padwith
|
||||
|
||||
"""
|
||||
construct for cypher class - get, set key and iv
|
||||
"""
|
||||
def __init__(self, iv, key=''):
|
||||
|
||||
if(not key):
|
||||
key = self.rawkey
|
||||
|
||||
self.key = key.encode('utf-8')
|
||||
self.iv = iv.encode('utf-8')
|
||||
|
||||
"""
|
||||
get hased key - if key is not set on init, then default key wil be used
|
||||
"""
|
||||
def getKEY(self):
|
||||
if(not self.key):
|
||||
sys.exit()
|
||||
|
||||
return hashlib.sha256(self.key).hexdigest()[:32]
|
||||
|
||||
"""
|
||||
get hashed IV value - if no IV values then it throw error
|
||||
"""
|
||||
def getIV(self):
|
||||
if(not self.iv):
|
||||
sys.exit()
|
||||
|
||||
self.iv = self.iv
|
||||
return hashlib.sha256(self.iv).hexdigest()[:16]
|
||||
|
||||
"""
|
||||
Encrypt given string using AES encryption standard
|
||||
"""
|
||||
def encrypt(self, raw):
|
||||
cipher = AES.new(self.getKEY(), self.method, self.getIV(), segment_size=128)
|
||||
return base64.b64encode(cipher.encrypt(self.pad(raw)))
|
||||
|
||||
"""
|
||||
Decrypt given string using AES standard
|
||||
"""
|
||||
def decrypt(self, encrypted):
|
||||
encrypted = base64.b64decode(encrypted)
|
||||
cipher = AES.new(self.getKEY(), self.method, self.getIV(), segment_size=128)
|
||||
return cipher.decrypt(encrypted).rstrip(self.padwith)
|
||||
32
encrypted_proxy/proxy.py
Executable file
32
encrypted_proxy/proxy.py
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import urllib.request
|
||||
import sys
|
||||
import os
|
||||
from lib.MyCypher import MyCypher
|
||||
import libravatar
|
||||
|
||||
# Both need to be the same as in your client code that encrypts the
|
||||
# mail address
|
||||
iv = 'asdf'
|
||||
key = 'Hallo123'
|
||||
|
||||
#sys.stderr.buffer.write(b'%s' % bytes(os.environ.get("QUERY_STRING", "No Query String in url"), 'utf-8'))
|
||||
|
||||
cypher = MyCypher(iv = iv, key = key)
|
||||
mail = cypher.decrypt(os.environ.get('QUERY_STRING').encode('utf-8')).decode('utf-8')
|
||||
|
||||
link = libravatar.libravatar_url(mail)
|
||||
sys.stderr.buffer.write(b'%s' % bytes(link, 'utf-8'))
|
||||
|
||||
data = None
|
||||
with urllib.request.urlopen(link) as f:
|
||||
data = f.read()
|
||||
|
||||
for header in f.headers._headers:
|
||||
if header[0] == 'Content-Type':
|
||||
sys.stdout.buffer.write(b"%s: %s\n\n" % (bytes(header[0], 'utf-8'), bytes(header[1], 'utf-8')))
|
||||
sys.stdout.flush()
|
||||
break
|
||||
|
||||
sys.stdout.buffer.write(data)
|
||||
9
encrypted_proxy/test_code/decrypt.py
Normal file
9
encrypted_proxy/test_code/decrypt.py
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from MyCypher import MyCypher
|
||||
|
||||
encstr = bytes('drEN/LqPBu1wJYHpN5eCjZXqVgvDEP3rZnXJt85Ma0k=', 'utf-8')
|
||||
|
||||
cypher = MyCypher(iv = str('asdf'))
|
||||
print(cypher.decrypt(encstr))
|
||||
|
||||
8
encrypted_proxy/test_code/encrypt.php
Normal file
8
encrypted_proxy/test_code/encrypt.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
include 'lib/MyCypher.php';
|
||||
|
||||
$iv = 'asdf';
|
||||
$key = 'Hallo123';
|
||||
$cypher = new MyCypher($iv=$iv, $key=$key);
|
||||
$php_encrypted = $cypher->encrypt('oliver@linux-kernel.at');
|
||||
print($php_encrypted);
|
||||
Reference in New Issue
Block a user