initial commit

This commit is contained in:
Luke Ogburn
2019-04-20 17:12:07 -04:00
commit d9c3f306e6
8 changed files with 162 additions and 0 deletions

7
README.md Normal file
View File

@@ -0,0 +1,7 @@
## Encrypt text!
This repo uses php to encrypt and decrypt text. Encrypted text is
downloaded into a text file, which stores all relevent information in
XML.
To decrypt, upload the file in decrypt.php and type in the encryption
key. The contents of the txt file are obtained and used along with the
key to decrypt the original text.

18
decrypt.php Normal file
View File

@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Decrypt file</title>
<meta name=viewport content=width=device-width,initial-scale=1.0>
<link rel=stylesheet href=style.css type=text/css>
</head>
<body>
<form class=center method=POST action=decryptFunc.php enctype="multipart/form-data">
<input type=file name=encDoc><br>
<input id=key type=text name=key placeholder='Decryption key'><br>
<button type=submit name=submit value=submit id=submitWriting>SUBMIT</button>
</form>
<br>
<p class=center><a href=/cs/encrypt.php>Encrypt a file</a></p>
</body>
</html>

14
decryptFunc.php Normal file
View File

@@ -0,0 +1,14 @@
<?php
require "enc.php";
$words = file_get_contents($_FILES["encDoc"]["tmp_name"]);
$data = simplexml_load_string($words) or die("Couldn't make object");
//Get the XML info in variables (hex2bin the iv and tag)
$key = $_POST["key"];
$iv = hex2bin($data->iv);
$tag = hex2bin($data->tag);
$ciphertext = $data->content;
echo "Your decrypted content:<br>";
echo decrypt($ciphertext, $key, $iv, $tag);;
?>

17
enc.php Normal file
View File

@@ -0,0 +1,17 @@
<?php
function encrypt($plaintext, $key){
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods())){
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$res = openssl_encrypt($plaintext, $cipher, $key, $options=0, $iv, $tag);
return array($res, $iv, $tag);
}
}
function decrypt($ciphertext, $key, $iv, $tag){
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods())){
return openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv, $tag);
}
}
?>

27
encrypt.php Normal file
View File

@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Encrytion and stuff</title>
<meta name=viewport content=width=device-width,initial-scale=1.0>
<link rel=stylesheet href=style.css type=text/css>
</head>
<body>
<script>
function wordCount(thing) {
regex = /(\S\s)|(([A-Z]|[a-z])(\.|\!|\?|\z))/;
numOfParenthesis = 5; //how many par. sets are in the regex
words = (thing.value.split(regex).length-1)/numOfParenthesis;
document.getElementById("counter").innerHTML = words;
}
</script>
<form action=submit.php method=POST>
<h2 id=counter>0</h2>
<textarea onkeyup=wordCount(this) placeholder='Write your words here...' name=words></textarea>
<input id=key type=text name=key placeholder='Decryption key' required>
<button type=submit name=submit value=submit id=submitWriting>SUBMIT</button>
</form>
<br>
<p class=center><a href=/cs/decrypt.php>Decrypt a file</a></p>
</body>
</html>

14
index.php Normal file
View File

@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Encrytion and stuff</title>
<meta name=viewport content=width=device-width,initial-scale=1.0>
<link rel=stylesheet href=style.css type=text/css>
</head>
<body class=center>
<h2><a href=encrypt.php>ENCRYPT</a></h2>
<p>or</p>
<h2><a href=decrypt.php>DECRYPT</a></h2>
</body>
</html>

56
style.css Normal file
View File

@@ -0,0 +1,56 @@
body{
background-color: #151515;
color: #ccc;
font-size: 1.4em;
font-family: monospace;
}
a{
color: #ccc;
}
.center{
text-align: center;
}
#counter{
text-align: center;
}
textarea{
width: 70%;
background-color: #252525;
border: none;
padding: 1em;
border-radius: 0.4em;
display: block;
margin-left: auto;
margin-right: auto;
font-size: 0.9em;
color: inherit;
min-height: 50vh;
}
#key{
font-family: inherit;
display: block;
width: 25%;
margin-left: auto;
margin-right: auto;
background-color: #333;
border: none;
border-radius: 0.4em;
padding: 0.5em;
margin-top: 1em;
font-size: 0.9em;
color: inherit;
}
button{
display: block;
margin-left: auto;
margin-right: auto;
margin-top: 1em;
background-color: #333;
color: inherit;
border: none;
padding: 0.5em 1em;
border-radius: 0.4em;
}
form>*{
margin-top: 1em;
}

9
submit.php Normal file
View File

@@ -0,0 +1,9 @@
<?php
require "enc.php";
$enc = encrypt($_POST["words"], $_POST["key"]);
$content = "<encrypted>\n"." <iv>".bin2hex($enc[1])."</iv>\n"." <tag>".bin2hex($enc[2])."</tag>\n"." <content>".$enc[0]."</content>\n"."</encrypted>";
header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="encrypted.txt"');
echo $content;
?>