您的位置:首页 > 其它

MVC DES CBC模式加密

2019-01-18 19:46 98 查看

文献种类:专题技术总结文献;
开发工具与关键技术:VisualStudio2017、C#
作者:高俊杰  ;年级:1703;撰写时间:2019年1月18日 

DES加密块链模式CBC的特点:

 代码如下:

  • 1.加密的密文长度为64位(即8个字节);
  • 2.当相同的明文使用同样的密钥和初始向量的时候会产生相同的密文;
  • 3.密文块要依赖以前的操作结果,因此,密文块不能重新进行排列;
  • 4.可以使用不同的初始化向量来避免相同的明文产生相同的密文,可以一定程度上抵抗字典攻击;
  • 5.当一个错误发生以后,当前和以后的密文都会受到影响;

/// <summary> 
/// DES CBC模式加密
/// </summary>
/// <param name="aStrString">待加密的字符串</param>
/// <param name="aStrKey">密钥</param>
/// <param name="aStrIv">向量:只有在CBC加密模式下才适用</param> 

public ActionResult Encrypt3DES(string aStrString, string aStrKey, string aStrIv)
        {
            CipherMode CbcMode = CipherMode.CBC;//运算模式
            try
            {
                var des = new TripleDESCryptoServiceProvider
                {
                    Key = Encoding.UTF8.GetBytes(aStrKey),//对密钥进行编码
                    Mode = CbcMode//设置运算模式
                };
                if (CbcMode == CipherMode.CBC)//判断运算模式是不是CBC模式
                {
                    des.IV = Encoding.UTF8.GetBytes(aStrIv);//对向量进行编码
                }
                var desEncrypt = des.CreateEncryptor();//用密钥和向量创建对称加密器对象
                byte[] buffer = Encoding.UTF8.GetBytes(aStrString);//对待加密的字符串进行编码
                var bStrString = Convert.ToBase64String(desEncrypt.TransformFinalBlock(buffer, 0, buffer.Length));//转换表示形式
                return Json(bStrString, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json("failed", JsonRequestBehavior.AllowGet);
            }
        }

效果图如下:


 

注意:密钥为24位,向量为8位  

页面代码如下:

<div>
        <label>DES数据加密</label>
        <div>
                <label>DES密钥:</label>
                <div>
                          <input id="DESJMMY">
                </div>
          </div>
          <div>
                  <label>DES向量:</label>
                  <div>
                          <input id="DESJMXL">
                  </div>
           </div>
          <div>
                  <label>加密前:</label>
                   <div>
                                      <input id="DESJMQ">
                   </div>
          </div>
         <div>
                   <label>加密后:</label>
                   <div>
                            <input id="DESJMH">
                    </div>
             </div>
             <button id="DESJMQR" >确认</button>
     </div>

JavaScript代码如下:

 <script>
        $("#DESJMQR").click(function () {
            var targetValue = $("#DESJMQ").val().trim();
            var key = $("#DESJMMY").val().trim();
            if (targetValue != "" && key != "") {
                $.post("/MD5JM/Encrypt", {
                    targetValue, targetValue,
                    key: key
                }, function (data) {
                    $("#DESJMH").val(data);
                    if (targetValue == "") {
                        $("#DESJMH").val("");
                    }
                });
            } else {
                layer.alert("请填写完整!", { icon: 0, title: "提示", offset: "100px" });
            }
        });
    </script>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: