Encrypt the string In Typescript And Decrypt In C# using Advanced Encryption Standard Algorithm(AES)

后端 未结 2 913
情书的邮戳
情书的邮戳 2020-12-28 23:40

I am having struggle to implement the encryption in typescript and decryption in C#. Before posting question here, I did Google it and find some links but those links are re

相关标签:
2条回答
  • 2020-12-29 00:21

    I had a similar issue. I'm using Angular 4/Angular-Cli 1.0.0. What worked for me:

    npm install crypto-js --save
    npm install @types/crypto-js --save
    

    After these two commands, reference the crypto-js library in the angular-cli.json file, in the "scripts" array. In my case:

    "scripts": [
        "../node_modules/crypto-js/crypto-js.js"
      ]
    

    You'll notice that in the node_modules/@types directory, you'll have a crypto-js subdirectory. So put a reference to the node_modules/@types/crypto-js/index.d.ts file in your code, using a triple-slash directive, so the compliler knows that the typings file is necessary to compile that module file:

    /// <reference path="relative_path_to_cypto_folder/index.d.ts" />
    

    Alternatively, you can also use "types" attribute instead of "path", since you're referencing a typings definition inside node_modules/@types:

    /// <reference types="crypto-js" />
    

    After that you can use your code exactly as it is:

    /// <reference types="crypto-js" />
    
    import * as CryptoJS from 'crypto-js';
    
    
    var key = CryptoJS.enc.Utf8.parse('7061737323313233');
    var iv = CryptoJS.enc.Utf8.parse('7061737323313233');
    var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse("It works"), key,
        {
            keySize: 128 / 8,
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
    
    var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
        keySize: 128 / 8,
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    
    console.log('Encrypted :' + encrypted);
    console.log('Key :' + encrypted.key);
    console.log('Salt :' + encrypted.salt);
    console.log('iv :' + encrypted.iv);
    console.log('Decrypted : ' + decrypted);
    console.log('utf8 = ' + decrypted.toString(CryptoJS.enc.Utf8));
    
    0 讨论(0)
  • 2020-12-29 00:34

    npm instal crypto-js

    //Inside imports of your TS file include 
    import * as CryptoJS from 'crypto-js';
    
    // Declare this key and iv values in declaration
    private key = CryptoJS.enc.Utf8.parse('4512631236589784');
    private iv = CryptoJS.enc.Utf8.parse('4512631236589784');
    
    // Methods for the encrypt and decrypt Using AES
    encryptUsingAES256() {
        var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(JSON.stringify("Your Json Object data or string")), this.key, {
            keySize: 128 / 8,
            iv: this.iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        console.log('Encrypted :' + encrypted);
        this.decryptUsingAES256(encrypted);
        return encrypted;
    }
    
    decryptUsingAES256(decString) {
        var decrypted = CryptoJS.AES.decrypt(decString, this.key, {
            keySize: 128 / 8,
            iv: this.iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        console.log('Decrypted : ' + decrypted);
        console.log('utf8 = ' + decrypted.toString(CryptoJS.enc.Utf8));
    
    }
    

    The C# code to encode or decode is here.

    public class encr {
        public static string DecryptStringAES(string cipherText) {
            var keybytes = Encoding.UTF8.GetBytes("4512631236589784");
            var iv = Encoding.UTF8.GetBytes("4512631236589784");
    
            var encrypted = Convert.FromBase64String(cipherText);
            var decriptedFromJavascript = DecryptStringFromBytes(encrypted, keybytes, iv);
            return decriptedFromJavascript;
        }
        private static string DecryptStringFromBytes(byte[] cipherText, byte[] key, byte[] iv) {
            // Check arguments.
            if (cipherText == null || cipherText.Length <= 0) {
                throw new ArgumentNullException("cipherText");
            }
            if (key == null || key.Length <= 0) {
                throw new ArgumentNullException("key");
            }
            if (iv == null || iv.Length <= 0) {
                throw new ArgumentNullException("key");
            }
    
            // Declare the string used to hold
            // the decrypted text.
            string plaintext = null;
    
            // Create an RijndaelManaged object
            // with the specified key and IV.
            using(var rijAlg = new RijndaelManaged()) {
                //Settings
                rijAlg.Mode = CipherMode.CBC;
                rijAlg.Padding = PaddingMode.PKCS7;
                rijAlg.FeedbackSize = 128;
    
                rijAlg.Key = key;
                rijAlg.IV = iv;
    
                // Create a decrytor to perform the stream transform.
                var decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);
    
                try {
                    // Create the streams used for decryption.
                    using(var msDecrypt = new MemoryStream(cipherText)) {
                        using(var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) {
    
                            using(var srDecrypt = new StreamReader(csDecrypt)) {
                                // Read the decrypted bytes from the decrypting stream
                                // and place them in a string.
                                plaintext = srDecrypt.ReadToEnd();
    
                            }
    
                        }
                    }
                } catch {
                    plaintext = "keyError";
                }
            }
    
            return plaintext;
        }
    
        public static string EncryptStringAES(string plainText) {
            var keybytes = Encoding.UTF8.GetBytes("4512631236589784");
            var iv = Encoding.UTF8.GetBytes("4512631236589784");
    
            var encryoFromJavascript = EncryptStringToBytes(plainText, keybytes, iv);
            return Convert.ToBase64String(encryoFromJavascript);
        }
    
        private static byte[] EncryptStringToBytes(string plainText, byte[] key, byte[] iv) {
            // Check arguments.
            if (plainText == null || plainText.Length <= 0) {
                throw new ArgumentNullException("plainText");
            }
            if (key == null || key.Length <= 0) {
                throw new ArgumentNullException("key");
            }
            if (iv == null || iv.Length <= 0) {
                throw new ArgumentNullException("key");
            }
            byte[] encrypted;
            // Create a RijndaelManaged object
            // with the specified key and IV.
            using(var rijAlg = new RijndaelManaged()) {
                rijAlg.Mode = CipherMode.CBC;
                rijAlg.Padding = PaddingMode.PKCS7;
                rijAlg.FeedbackSize = 128;
    
                rijAlg.Key = key;
                rijAlg.IV = iv;
    
                // Create a decrytor to perform the stream transform.
                var encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
    
                // Create the streams used for encryption.
                using(var msEncrypt = new MemoryStream()) {
                    using(var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) {
                        using(var swEncrypt = new StreamWriter(csEncrypt)) {
                            //Write all data to the stream.
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }
            // Return the encrypted bytes from the memory stream.
            return encrypted;
        }
    }
    
    0 讨论(0)
提交回复
热议问题