File Exchange

## Matlab AES Encryption Decryption Example

version 1.0.0 (1.59 KB) by Daniel

### Daniel (view profile)

Updated 15 Oct 2019

AES Encryption Decryption Example, works for strings and for structures.

"Data Encryption Standard (DES) encryption algorithm is considered highly insecure; messages encrypted using DES have been decrypted by brute force within a single day by machines such as the Electronic Frontier Foundation’s (EFF) Deep Crack."

"A more secure encryption algorithm is AES – Advanced Encryption Standard which is a symmetric encryption algorithm. AES encryption is used by U.S. for securing sensitive but unclassified material, so we can say it is secure enough."

1. AES Encryption and Decryption
Let’s see an example of using AES encryption in Matlab program.

classdef AES < handle
%UNTITLED Summary of this class goes here
% Detailed explanation goes here

properties (Access = private)
secretKey
cipher
end

methods
function obj = AES(secret, algorithm)
%AES Construct an instance of this class
% algorithm options are https://docs.oracle.com/javase/9/docs/specs/security/standard-names.html#messagedigest-algorithms
import java.security.MessageDigest;
import java.lang.String;
import java.util.Arrays;
import javax.crypto.Cipher;

key = String(secret).getBytes("UTF-8");
sha = MessageDigest.getInstance(algorithm);
key = sha.digest(key);
key = Arrays.copyOf(key, 16);
obj.secretKey = javaObject('javax.crypto.spec.SecretKeySpec',key, "AES");
end

function encrypted = encrypt(obj, strToEncrypt)
%ENCRYPT Summary of this method goes here
% Detailed explanation goes here
import java.util.Base64;
import java.lang.String;
import javax.crypto.Cipher;

obj.cipher.init(Cipher.ENCRYPT_MODE, obj.secretKey);
encrypted = string(Base64.getEncoder().encodeToString(obj.cipher.doFinal(String(strToEncrypt).getBytes("UTF-8"))));
end

function encrypted = encryptStructuredData(obj, structuredData)
encrypted = obj.encrypt(jsonencode(structuredData));
end

function decrypted = decryptStructuredData(obj, encryptedStructuredData)
decrypted = jsondecode(obj.decrypt(encryptedStructuredData));
end

function decrypted = decrypt(obj, strToDecrypt)
%DECRYPT Summary of this method goes here
% Detailed explanation goes here
import javax.crypto.Cipher;
import java.lang.String;
import java.util.Base64;

obj.cipher.init(Cipher.DECRYPT_MODE, obj.secretKey);
decrypted = string(String(obj.cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))));
end
end
end

2. Encryption and decryption example
Let’s test if we are able to get the decrypted string back from encrypted string.

secretKey = "ssshhhhhhhhhhh!!!!";
algorithm = "SHA-1";
aes = AES(secretKey, algorithm);

originalString = "howtodoinjava.com";
encryptedString = aes.encrypt(originalString);
decryptedString = aes.decrypt(encryptedString) ;

disp(originalString);
disp(encryptedString);
disp(decryptedString);

Output:

howtodoinjava.com
Tg2Nn7wUZOQ6Xc+1lenkZTQ9ZDf9a2/RBRiqJBCIX6o=
howtodoinjava.com

Use the following functions for Matlab structures:
- encryptStructuredData(structureToEncrypt)
- decryptStructuredData(encryptedStructure)

Happy Learning !!

### Cite As

Daniel (2020). Matlab AES Encryption Decryption Example (https://www.mathworks.com/matlabcentral/fileexchange/73037-matlab-aes-encryption-decryption-example), MATLAB Central File Exchange. Retrieved .

please ignore my previous question. Now I understand how does this work
many thansk for this work

hello
when I create the object obj = AES(secretKey, algorithm);
how do I get the "secretKey" knowing that it was created by another user ?

many thanks

Daniel

### Daniel (view profile)

Dear Duong Mai, Java 8 provides java.util.Base64. Please make sure your MATLAB either has java 8 internally or make sure you have included all java dependencies to your project. The following might help you solve your problem: https://stackoverflow.com/questions/469695/decode-base64-data-in-java

duong mai

### duong mai (view profile)

Thanks for your code. Could you fix my error, when I ran the command: encryptedString = aes.encrypt(originalString); There is an error: Error: File: AES.m Line: 30 Column: 20. Arguments to IMPORT must either end with ".*" or else specify a fully qualified class name: "java.util.Base64" fails this test.
And when I add ".*", then run the command again, there is a new error: ??? Undefined variable "Base64" or class "Base64.getEncoder".

Daniel

### Daniel (view profile)

Hi @Sorin. Can you provide a breaking example that your small modification fixes?

Sorin

### Sorin (view profile)

Hi Daniel,
Thanks for this excellent work :-). I just made a small modification l.43 to work with structures (Matlab 2017b):
%decrypted = jsondecode(obj.decrypt(encryptedStructuredData));
decrypted = jsondecode(char(obj.decrypt(encryptedStructuredData)));

##### MATLAB Release Compatibility
Created with R2019b
Compatible with any release
##### Platform Compatibility
Windows macOS Linux