文献种类:专题技术总结文献;
开发工具与关键技术: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>