使用高级加密标准算法(AES)在Typescript中加密字符串并在C#中解密

普拉迪普

我正在努力在C#中实现打字稿中的加密和解密。在这里发布问题之前,我对它进行了Google搜索,并找到了一些链接,但这些链接与JavaScript相关,而不与打字稿相关。

使用javascript加密并使用AES算法在C#中解密

使用angular2中的cryptojs库加密文本

如何在Angular 2 eg中导入非核心npm模块(以使用加密库)?

我遵循了以上链接,以在当前应用程序中实现加密/解密概念。

这是我在myservice.ts中编写的代码

    //import { CryptoJS } from 'node_modules/crypto-js/crypto-js.js';
    //import '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));

在将上述代码行添加到myservice.ts中之前,我package.json文件中将依赖项添加为“ crypto-js”:“ ^ 3.1.9-1”

在package.json中添加以上依赖项之后,我就成功恢复了软件包。但是CryptoJS仍然在myservice.ts中显示错误,例如找不到名为CryptoJS的名称

您能否告诉我如何从节点模块导入CryptoJS,还告诉我如何使用高级安全算法(AES)在Typescript中加密字符串并在C#中解密相同字符串?

普拉迪普

安基库玛·辛格(Ankitkumar Singh)

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));

}

此处用于编码或解码的C#代码。

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;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用TripleDES在C#中加密字符串,需要在PHP中解密

在C#中加密和解密字符串

在iOS中使用AES / CBC / PKCS7Padding 128位算法在Android中加密的解密字符串的问题

C-使用AES加密和解密字符串

如何在flutter中加密字符串并在其他设备中解密此加密字符串?

如何在Java中解密C#加密的AES字符串

从 C# 加密的解密字符串

AES使用DCrypt在Delphi(10 Seattle)中加密字符串,并使用PHP / OpenSSL解密

在Node.js中加密字符串并在Java中解密

如何在Java中使用AES算法解密加密的字符串?

无法解密AES加密的字符串

无法从目标C解密AES加密的字符串

如何使用Rijndael在iOS中对C#中的解密字符串进行加密

使用Bouncy Castle在C#中加密和使用AES在Python中解密的问题(EAX模式)

sha256在c#中加密和解密字符串

如何使用RSA for Chilkat在C#中加密内容并在Java中解密内容?

AES 在终端中加密并在 PHP 中解密

在Python中解密使用Halite / Libsodium在PHP中加密的字符串

JavaScript AES加密和解密(高级加密标准)

在MySQL中加密,在C#中解密

使用C ++,Openssl和AES加密和解密字符串

解密用PHP加密的C#字符串(Blowfish)

使用AES-CFB在python中加密并在Java中解密

在Java中加密字符串,在node.js中解密,错误:解密错误

使用函数加密/解密字符串

在Objective-C中解密OpenSSL加密的字符串

在AES加密/解密中无法获取解密为字符串的文件

在Android中加密/解密字符串的简便方法

如何在php中加密和解密字符串?