Anindya Maiti
10 months ago
3 changed files with 229 additions and 0 deletions
@ -0,0 +1,64 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"crypto/aes" |
||||
|
"encoding/hex" |
||||
|
"fmt" |
||||
|
) |
||||
|
|
||||
|
func main() { |
||||
|
|
||||
|
// cipher key
|
||||
|
key := "thisis32bitlongpassphraseimusing" |
||||
|
|
||||
|
// plaintext
|
||||
|
pt := "This is a secret" |
||||
|
|
||||
|
c := EncryptAES([]byte(key), pt) |
||||
|
|
||||
|
// plaintext
|
||||
|
fmt.Println((pt)) |
||||
|
|
||||
|
fmt.Println([]byte(pt)) |
||||
|
|
||||
|
// ciphertext
|
||||
|
|
||||
|
fmt.Println((c)) |
||||
|
fmt.Println([]byte(c)) |
||||
|
|
||||
|
key2 := "thisis32bitlongpassphraseimusing" |
||||
|
|
||||
|
// decrypt
|
||||
|
DecryptAES([]byte(key2), c) |
||||
|
} |
||||
|
|
||||
|
func EncryptAES(key []byte, plaintext string) string { |
||||
|
|
||||
|
c, err := aes.NewCipher(key) |
||||
|
CheckError(err) |
||||
|
|
||||
|
out := make([]byte, len(plaintext)) |
||||
|
|
||||
|
c.Encrypt(out, []byte(plaintext)) |
||||
|
|
||||
|
return hex.EncodeToString(out) |
||||
|
} |
||||
|
|
||||
|
func DecryptAES(key []byte, ct string) { |
||||
|
ciphertext, _ := hex.DecodeString(ct) |
||||
|
|
||||
|
c, err := aes.NewCipher(key) |
||||
|
CheckError(err) |
||||
|
|
||||
|
pt := make([]byte, len(ciphertext)) |
||||
|
c.Decrypt(pt, ciphertext) |
||||
|
|
||||
|
s := string(pt[:]) |
||||
|
fmt.Println("DECRYPTED:", s) |
||||
|
} |
||||
|
|
||||
|
func CheckError(err error) { |
||||
|
if err != nil { |
||||
|
panic(err) |
||||
|
} |
||||
|
} |
@ -0,0 +1,28 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"crypto/md5" |
||||
|
"crypto/sha256" |
||||
|
"fmt" |
||||
|
) |
||||
|
|
||||
|
func main() { |
||||
|
s := "Hello" |
||||
|
|
||||
|
sha256 := sha256.Sum256([]byte(s)) |
||||
|
md5 := md5.Sum([]byte(s)) |
||||
|
|
||||
|
fmt.Println() |
||||
|
fmt.Println(s) |
||||
|
|
||||
|
fmt.Println() |
||||
|
fmt.Printf("%x", sha256) |
||||
|
fmt.Println() |
||||
|
|
||||
|
fmt.Println() |
||||
|
fmt.Printf("%x", md5) |
||||
|
|
||||
|
fmt.Println() |
||||
|
fmt.Println() |
||||
|
|
||||
|
} |
@ -0,0 +1,137 @@ |
|||||
|
// Derived from: https://medium.com/@bobgzm/golang-cryptography-rsa-asymmetric-algorithm-e91363a2f7b3
|
||||
|
|
||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"crypto" |
||||
|
"crypto/rand" |
||||
|
"crypto/rsa" |
||||
|
"crypto/sha256" |
||||
|
"fmt" |
||||
|
"os" |
||||
|
) |
||||
|
|
||||
|
func main() { |
||||
|
|
||||
|
alicePrivateKey, err := rsa.GenerateKey(rand.Reader, 2048) |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
alicePublicKey := &alicePrivateKey.PublicKey |
||||
|
|
||||
|
trudyPrivateKey, err := rsa.GenerateKey(rand.Reader, 2048) |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
//trudyPublicKey := &trudyPrivateKey.PublicKey
|
||||
|
|
||||
|
bobPrivateKey, err := rsa.GenerateKey(rand.Reader, 2048) |
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
bobPublicKey := &bobPrivateKey.PublicKey |
||||
|
|
||||
|
fmt.Println("Alice's Private Key : ", alicePrivateKey) |
||||
|
fmt.Println() |
||||
|
fmt.Println("Alice's Public key ", alicePublicKey) |
||||
|
fmt.Println() |
||||
|
fmt.Println("Bob's Private Key : ", bobPrivateKey) |
||||
|
fmt.Println() |
||||
|
fmt.Println("Bob's Public key ", bobPublicKey) |
||||
|
fmt.Println() |
||||
|
|
||||
|
message := []byte("first rule of cs5970 is that you tell everyone about cs5970") |
||||
|
label := []byte("") |
||||
|
hash := sha256.New() |
||||
|
|
||||
|
// RSA encryption examples
|
||||
|
ciphertext, err := rsa.EncryptOAEP( |
||||
|
hash, |
||||
|
rand.Reader, |
||||
|
bobPublicKey, |
||||
|
message, |
||||
|
label) |
||||
|
|
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
|
||||
|
// OAEP is a padding scheme, used with RSA
|
||||
|
fmt.Printf("OAEP encrypted [%s] to \n[%x]\n", string(message), ciphertext) |
||||
|
fmt.Println() |
||||
|
|
||||
|
// Same encryption, but ciphertext2 will be different due to rand.Reader
|
||||
|
ciphertext2, err := rsa.EncryptOAEP( |
||||
|
hash, |
||||
|
rand.Reader, |
||||
|
bobPublicKey, |
||||
|
message, |
||||
|
label) |
||||
|
|
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
|
||||
|
// OAEP is a padding scheme, used with RSA
|
||||
|
fmt.Printf("OAEP encrypted [%s] to \n[%x]\n", string(message), ciphertext2) |
||||
|
fmt.Println() |
||||
|
|
||||
|
// Digital signature examples
|
||||
|
var opts rsa.PSSOptions |
||||
|
opts.SaltLength = rsa.PSSSaltLengthAuto // for simple example
|
||||
|
PSSmessage := message |
||||
|
newhash := crypto.SHA256 |
||||
|
pssh := newhash.New() |
||||
|
pssh.Write(PSSmessage) |
||||
|
|
||||
|
hashed := pssh.Sum(nil) |
||||
|
signature, err := rsa.SignPSS( |
||||
|
rand.Reader, |
||||
|
trudyPrivateKey, |
||||
|
newhash, |
||||
|
hashed, |
||||
|
&opts) |
||||
|
|
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
|
||||
|
// Probabilistic Signature Scheme (PSS)
|
||||
|
fmt.Printf("PSS Signature : %x\n", signature) |
||||
|
fmt.Println() |
||||
|
|
||||
|
plainText, err := rsa.DecryptOAEP( |
||||
|
hash, |
||||
|
rand.Reader, |
||||
|
bobPrivateKey, |
||||
|
ciphertext, |
||||
|
label) |
||||
|
|
||||
|
if err != nil { |
||||
|
fmt.Println(err) |
||||
|
os.Exit(1) |
||||
|
} |
||||
|
|
||||
|
fmt.Printf("OAEP decrypted [%x] to \n[%s]\n", ciphertext, plainText) |
||||
|
fmt.Println() |
||||
|
|
||||
|
err = rsa.VerifyPSS( |
||||
|
alicePublicKey, |
||||
|
newhash, |
||||
|
hashed, |
||||
|
signature, |
||||
|
&opts) |
||||
|
|
||||
|
if err != nil { |
||||
|
fmt.Println("Signature verification failed!") |
||||
|
os.Exit(1) |
||||
|
} else { |
||||
|
fmt.Println("Signature verification successful!") |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue