前端数据加密后端解密

注意:有可能会出现后端解密出来的数据为空的情况,所以需要前端先验证一下是否可以正常解密。
前端代码

<script src="http://cdn.bootcdn.net/ajax/libs/crypto-js/4.0.0/crypto-js.js"></script>
<script>
function AES_ECB_ENCRYPT(text, secretKey) {
    var keyHex = CryptoJS.enc.Base64.parse(secretKey);
    var messageHex = CryptoJS.enc.Utf8.parse(text);
    var encrypted = CryptoJS.AES.encrypt(messageHex, keyHex, {
        "mode": CryptoJS.mode.ECB,
        "padding": CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}
function AES_ECB_DECRYPT(textBase64, secretKey) {
    var keyHex = CryptoJS.enc.Base64.parse(secretKey);
    var decrypt = CryptoJS.AES.decrypt(textBase64, keyHex, {
        "mode": CryptoJS.mode.ECB,
        "padding": CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Utf8.stringify(decrypt);
}
function initValidate() {
    var loginForm = $("#LoginForm");

    var validForm = loginForm.validate({
        errorClass: "validate-inline",
        rules: {
            UserName: {
                required: true,
            },
            Password: {
                required: true,
            }
        },
        messages: {
            UserName: {
                required: "请输入用户名!",
            },
            Password: {
                required: "请输入密码!",
            },
            Code: {
                required:"请输入验证码!"
            }

        },
        highlight: function (element) { // hightlight error inputs
            $(element)
                .closest('.control-group').removeClass('success').addClass('error'); // set error class to the control group
        },
        unhighlight: function (element) { // revert the change dony by hightlight
            $(element).closest('.control-group').removeClass('error'); // set error class to the control group
        },
        success: function (label) {
            label.closest('.control-group').removeClass('error').addClass('success'); // set success class to the control group
        },
        submitHandler: function (form) {
            var message = $("#Password").val().toString();
            console.log(message);
            //前后端key值需要保持一致
            var key = "12345678900000001234567890000000";
            // 测试AES-256-ECB
            var ecbEncrypt = AES_ECB_ENCRYPT(message, key);
            console.log("ecb加密", ecbEncrypt);
            var ecbDecrypt = AES_ECB_DECRYPT(ecbEncrypt, key);
            console.log("ecb结果比较---", ecbDecrypt)
            var data = {
                UserName: $("#UserName").val(),
                Password: ecbEncrypt,//$("#Password").val()
                Code: $("#Code").val()
            };
            $.ajax({
                type: 'post',
                url: '@Url.Action("Login", "AccountApi")',
                data: data,
                success: function (data) {
                    if (data.success) {
                        $("#logging").text("登录成功,正在跳转...");
                        window.location.href = "@Url.Action("Switch","Home")?ReturnUrl=@Url.Action("Home", "Meeting")";
                    }
                    else {
                        validForm.showErrors({ Password: data.msg });
                        $("#login").show();
                        $("#logging").hide();
                        }
                },
                beforeSend: function () {
                    $("#logging").show();
                    $("#login").hide();
                        },
                error: function () {
                    $("#login").show();
                    $("#logging").hide();
                            validForm.showErrors({ Password: "出现错误,请重试!" });
                        },
                complete: function () {}
            })
        }
    })
    </script>

后端代码

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
   
    var a = model.Password;
    model.Password = AesDecryptor_Base64(a, "12345678900000001234567890000000");
	//省略..................
}
public static string AesDecryptor_Base64(string DecryptStr, string Key)
{
    try
    {
        //byte[] keyArray = Encoding.UTF8.GetBytes(Key);
        byte[] keyArray = Convert.FromBase64String(Key);
        byte[] toEncryptArray = Convert.FromBase64String(DecryptStr);

        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = keyArray;
        rDel.Mode = CipherMode.ECB;
        rDel.Padding = PaddingMode.PKCS7;

        ICryptoTransform cTransform = rDel.CreateDecryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

        return Encoding.UTF8.GetString(resultArray);//  UTF8Encoding.UTF8.GetString(resultArray);
    }
    catch (Exception ex)
    {
        return null;
    }
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值