Sample code for 30+ languages & platforms
SQL Server

Duplicate Java AES Results

See more Encryption Examples

Demonstrates how to duplicate Java code for AES encryption.

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @crypt int
    EXEC @hr = sp_OACreate 'Chilkat.Crypt2', @crypt OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    EXEC sp_OASetProperty @crypt, 'CryptAlgorithm', 'aes'
    EXEC sp_OASetProperty @crypt, 'CipherMode', 'cbc'
    EXEC sp_OASetProperty @crypt, 'KeyLength', 256

    EXEC sp_OAMethod @crypt, 'SetEncodedIV', NULL, '000102030405060708090A0B0C0D0E0F', 'hex'
    EXEC sp_OAMethod @crypt, 'SetEncodedKey', NULL, 'uX1AytOx2bqKn1G1NiblFM3YrEMnvciC', 'ascii'

    EXEC sp_OASetProperty @crypt, 'EncodingMode', 'hex'

    DECLARE @encrypted nvarchar(4000)
    EXEC sp_OAMethod @crypt, 'EncryptStringENC', @encrypted OUT, 'tmpString'

    PRINT @encrypted

    EXEC sp_OAMethod @crypt, 'DecryptStringENC', @sTmp0 OUT, @encrypted
    PRINT @sTmp0

    --  The above Chilkat code duplicates the following Java code:

    --  import javax.crypto.Cipher;
    --  import javax.crypto.spec.IvParameterSpec;
    --  import javax.crypto.spec.SecretKeySpec;
    --  
    --  public class Test {
    --  	private static final String KEY = "uX1AytOx2bqKn1G1NiblFM3YrEMnvciC";
    --  	private static final String IV = "000102030405060708090A0B0C0D0E0F";
    --  
    --  	private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
    --  	public static String bytesToHex(byte[] bytes) {
    --  	    char[] hexChars = new char[bytes.length * 2];
    --  	    for (int j = 0; j < bytes.length; j++) {
    --  	        int v = bytes[j] & 0xFF;
    --  	        hexChars[j * 2] = HEX_ARRAY[v >>> 4];
    --  	        hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
    --  	    }
    --  	    return new String(hexChars);
    --  	}
    --  	public static byte[] hexToBytes(String s) {
    --  	    int len = s.length();
    --  	    byte[] data = new byte[len / 2];
    --  	    for (int i = 0; i < len; i += 2) {
    --  	        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
    --  	                             + Character.digit(s.charAt(i+1), 16));
    --  	    }
    --  	    return data;
    --  	}
    --  	public static byte[] encrypt(String value) {
    --  		try {
    --  			System.out.println("---- encrypt ----");
    --  			IvParameterSpec iv = new IvParameterSpec(hexToBytes(IV));
    --  			SecretKeySpec skeySpec = new SecretKeySpec(KEY.getBytes("ASCII"), "AES");
    --  			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    --  			cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
    --  			byte[] encrypted = cipher.doFinal(value.getBytes("ASCII"));
    --  			String x = bytesToHex(encrypted);
    --  			System.out.println(x);
    --  			return encrypted;
    --  		} catch (Exception ex) {
    --  			ex.printStackTrace();
    --  			return null;
    --  		}
    --  	}
    --  
    --  	public static String decrypt(byte[] encrypted) {
    --  		try {
    --  			System.out.println("---- decrypt ----");
    --  			IvParameterSpec iv = new IvParameterSpec(hexToBytes(IV));
    --  			SecretKeySpec skeySpec = new SecretKeySpec(KEY.getBytes("ASCII"), "AES");
    --  			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    --  			cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
    --  			byte[] original = cipher.doFinal(encrypted);
    --  			String x = new String(original);
    --  			System.out.println(x);
    --  			return x;
    --  		} catch (Exception ex) {
    --  			ex.printStackTrace();
    --  			return null;
    --  		}
    --  
    --  	}
    --  
    --  	public static void main(String[] args) {
    --  		byte[] encrypted = encrypt("tmpString");
    --  		decrypt(encrypted);
    --  	}
    --  }
    --  

    EXEC @hr = sp_OADestroy @crypt


END
GO