【问题标题】:Encrypt Image in c# and decrypt in typescript在 c# 中加密图像并在 typescript 中解密
【发布时间】:2018-04-11 07:21:03
【问题描述】:

我是 Angular 2 的新手。我想用 c# 中的密钥加密我的图像并在 typescript 中解密它。那可能吗。如果是的话,任何人都可以帮助我。 提前致谢。

要加密的代码

public string EncryptImage(byte[] imageBytes)
    {
        var csp = new RSACryptoServiceProvider(2048);

        var privKey = csp.ExportParameters(true);

        var pubKey = csp.ExportParameters(false);


        string pubKeyString;
        {
            var sw = new System.IO.StringWriter();

            var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));

            xs.Serialize(sw, pubKey);

            pubKeyString = sw.ToString();

        }
        {
            var sr = new System.IO.StringReader(pubKeyString);

            var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));

            pubKey = (RSAParameters)xs.Deserialize(sr);
        }

        csp = new RSACryptoServiceProvider();
        csp.ImportParameters(pubKey);

        var bytesCypherText = csp.Encrypt(imageBytes, false);

        var cypherText = Convert.ToBase64String(bytesCypherText);

        return cypherText;
    }

出现错误

    var bytesCypherText = csp.Encrypt(imageBytes, false); 

长度不好

【问题讨论】:

  • “想用密钥加密我的图像” 你用公钥加密,用公钥解密密钥,通常。但是是什么让你觉得你需要这个?

标签: c# angular typescript


【解决方案1】:

在 C# 中加密

public string EncryptData(string imageBytesBase64, string Encryptionkey)
    {
        RijndaelManaged objrij = new RijndaelManaged();

        objrij.Mode = CipherMode.CBC;

        objrij.Padding = PaddingMode.PKCS7;

        byte[] keyBytes = Encoding.UTF8.GetBytes(Encryptionkey);

        byte[] ivBytes = Encoding.UTF8.GetBytes(Encryptionkey.Substring(0, 16));

        int len = keyBytes.Length;

        if (len > ivBytes.Length)
            len = ivBytes.Length;

        Array.Copy(keyBytes, ivBytes, len);

        objrij.Key = keyBytes;

        objrij.IV = ivBytes;

        ICryptoTransform objtransform = objrij.CreateEncryptor();

        byte[] textDataByte = Encoding.UTF8.GetBytes(imageBytesBase64);

        return Convert.ToBase64String(objtransform.TransformFinalBlock(textDataByte, 0, textDataByte.Length));

    }

在 TypeScript 中解密

var decryptedTxt = CryptoJS.AES.decrypt(encryptedText, key, {
        keySize: 128 / 8,
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });

    this.decryptedText = decryptedTxt.toString(CryptoJS.enc.Utf8)

    this.ImageSrc = 'data:image/jpg;base64,' + this.decryptedText;

这里c#中的加密密钥和打字稿中的密钥是一样的

【讨论】:

    【解决方案2】:

    您好,您可以在双方使用任何加密引擎。

    例如,您可以使用:

    RSA(公钥/私钥)

    对于 TypeScript 方面: RSA library with angular

    对于 C# 端: C# RSA encryption/decryption with transmission

    AES(密码):

    对于打字稿方面: 使用https://github.com/ricmoo/aes-js 就可以了:

    import 'aes-js'; declare var aesjs: any;

    对于 C# 方面: 更多信息在这里Using AES encryption in C#

    由于所有加密算法都有很多配置参数,请注意在 C# 和 Typescript 端有匹配的配置。

    【讨论】:

    • 您好先生,我已经添加了我的代码。使用 RSA 加密,但出现错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多