machine key英[məˈʃi:n ki:]美[məˈʃin ki]
[词典]机器键
[例句]Automatic calling and answering unit machine key ring
自动呼叫和应答设备自动呼叫应答机键控铃呼叫,半自动呼叫
对称加密算法和非对称加密算法的区别是什么?
默认不需要自己设置,但如果你想保证不同服务器上的session可以同步那么你可以把服务器上的这个配置文件的machinekey都设置成一样的。至于加密通常情况下也不需要的,如果想加密可以用楼上的方法自带的。祝你好运!
验证视图状态Mac失败,怎么解决,最好能看懂
(一)对称加密(Symmetric Cryptography)
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。
对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法pj,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。
2000年10月2日,美国国家标准与技术研究所(NIST–American National Institute of Standards and Technology)选择了Rijndael算法作为新的高级加密标准(AES–Advanced Encryption Standard)。.NET中包含了Rijndael算法,类名叫RijndaelManaged,下面举个例子。
加密过程:
private string myData = “hello”
private string myPassword = “OpenSesame”
private byte[] cipherText
private byte[] salt = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 }
private void mnuSymmetricEncryption_Click(object sender, RoutedEventArgs e)
{
var key = new Rfc2898DeriveBytes(myPassword, salt)
// Encrypt the data.
var algorithm = new RijndaelManaged()
algorithm.Key = key.GetBytes(16)
algorithm.IV = key.GetBytes(16)
var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(myData)
using (var sourceStream = new MemoryStream(sourceBytes))
using (var destinationStream = new MemoryStream())
using (var crypto = new CryptoStream(sourceStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read))
{
moveBytes(crypto, destinationStream)
cipherText = destinationStream.ToArray()
}
MessageBox.Show(String.Format(“Data:{0}{1}Encrypted and Encoded:{2}”, myData, Environment.NewLine, Convert.ToBase64String(cipherText)))
}
private void moveBytes(Stream source, Stream dest)
{
byte[] bytes = new byte[2048]
var count = source.Read(bytes, 0, bytes.Length)
while (0 != count)
{
dest.Write(bytes, 0, count)
count = source.Read(bytes, 0, bytes.Length)
}
}
解密过程:
private void mnuSymmetricDecryption_Click(object sender, RoutedEventArgs e)
{
if (cipherText == null)
{
MessageBox.Show(“Encrypt Data First!”)
return
}
var key = new Rfc2898DeriveBytes(myPassword, salt)
// Try to decrypt, thus showing it can be round-tripped.
var algorithm = new RijndaelManaged()
algorithm.Key = key.GetBytes(16)
algorithm.IV = key.GetBytes(16)
using (var sourceStream = new MemoryStream(cipherText))
using (var destinationStream = new MemoryStream())
using (var crypto = new CryptoStream(sourceStream, algorithm.CreateDecryptor(), CryptoStreamMode.Read))
{
moveBytes(crypto, destinationStream)
var decryptedBytes = destinationStream.ToArray()
var decryptedMessage = new UnicodeEncoding().GetString(
decryptedBytes)
MessageBox.Show(decryptedMessage)
}
}
对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。
(二)非对称加密(Asymmetric Cryptography)
1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人–银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。
目前最常用的非对称加密算法是RSA算法,是Rivest, Shamir, 和Adleman于1978年发明,他们那时都是在MIT。.NET中也有RSA算法,请看下面的例子:
加密过程:
private byte[] rsaCipherText
private void mnuAsymmetricEncryption_Click(object sender, RoutedEventArgs e)
{
var rsa = 1

// Encrypt the data.
var cspParms = new CspParameters(rsa)
cspParms.Flags = CspProviderFlags.UseMachineKeyStore
cspParms.KeyContainerName = “My Keys”
var algorithm = new RSACryptoServiceProvider(cspParms)
var sourceBytes = new UnicodeEncoding().GetBytes(myData)
rsaCipherText = algorithm.Encrypt(sourceBytes, true)
MessageBox.Show(String.Format(“Data: {0}{1}Encrypted and Encoded: {2}”,
myData, Environment.NewLine,
Convert.ToBase64String(rsaCipherText)))
}
解密过程:
private void mnuAsymmetricDecryption_Click(object sender, RoutedEventArgs e)
{
if(rsaCipherText==null)
{
MessageBox.Show(“Encrypt First!”)
return
}
var rsa = 1
// decrypt the data.
var cspParms = new CspParameters(rsa)
cspParms.Flags = CspProviderFlags.UseMachineKeyStore
cspParms.KeyContainerName = “My Keys”
var algorithm = new RSACryptoServiceProvider(cspParms)
var unencrypted = algorithm.Decrypt(rsaCipherText, true)
MessageBox.Show(new UnicodeEncoding().GetString(unencrypted))
}
虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。为了解释这个过程,请看下面的例子:
(1) Alice需要在银行的网站做一笔交易,她的浏览器首先生成了一个随机数作为对称密钥。
(2) Alice的浏览器向银行的网站请求公钥。
(3) 银行将公钥发送给Alice。
(4) Alice的浏览器使用银行的公钥将自己的对称密钥加密。
(5) Alice的浏览器将加密后的对称密钥发送给银行。
(6) 银行使用私钥解密得到Alice浏览器的对称密钥。
(7) Alice与银行可以使用对称密钥来对沟通的内容进行加密与解密了。
(三)总结
(1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。
(2) 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。
(3) 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
电脑上可以试一下超级加密3000.具有文件加密、文件夹加密、数据粉碎、彻底隐藏硬盘分区、禁止或只读使用USB存储设备等功能。加密速度块!并且还有防复制防移动防删除的功能。每次使用加密文件夹或加密文件后不用再重新加密。而且使用也非常方便,安装软件后直接对需要加密的文件夹右击,选择超级加密或文件夹保护就可以了。
怎么实现简单单点登录?
方法一、去掉 runat=”server”。
感觉此方法是最无效的方法,因为asp.net控件都是服务器控件,所以都得需要放置在带有runat=”server”的表单中,此方案实验未成功解决问题。
方法二、添加enableEventValidation=”false” enableViewStateMac=”false” 或在webconfig中添加<pages enableEventValidation=”false” enableViewStateMac=”false” />
<system.web>
<pages enableEventValidation=”false” viewStateEncryptionMode =”Never” />
</system.web
enableViewState 可选的 Boolean 属性, 默认值为 True。指定视图状态是否启用并在多个页请求之间保持。
enableViewStateMac 可选的 Boolean 属性, 默认值为 True。指定从客户端回发页时,ASP.NET 是否应该对页的视图状态运行消息身份验证代码 (MAC)。如果为 True,将检 查加密的视图状态,以验证视图状态是否已在客户端被篡改。
viewStateEncryptionMode 可选的 ViewStateEncryptionMode 属性, 默认值为 Auto。此属性是.NETFramework 2.0 中的新属性。
Always 视图状态始终加密。
Never 视图状态从不加密,即使控件请求加密时也是如此。
Auto 视图状态根据控件的请求而加密。
此方法的目的是在接收页面上不添加ViewState,即不对页的视图状态进行身份代码验证(mac),所以此方法也是非安全方法。
所谓单点登录(Single Sign On就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。其实对于程序员在技术上要实现就得就是多个不同域名间共享cookie的问题。
最近在为ERP添加一个部署在另一台机器上,链接到原有老系统中的子项目,调用原有老项目中的Login实现单点登录,尝试了N次屡试不成,最后确定问题,是,.net2.0与4.0中对cookie的加密/解密方法由此差异,于是经过研究,重写实现了一个可以在不同.net版本中实现单点登录的简单方法。
代码:
protected void btnLogin_Click(object sender, EventArgs e)
{
//认证开票,跳转到原始请求页面
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(“ejiyuan”, false)
}
配置文件:
<!–访问权限控制–>
<authorization>
<deny users=”?”/>
</authorization>
<!–身份认证方式–>
<authentication mode=”Forms”>
<forms name=”.ASPNET” protection=”All” enableCrossAppRedirects=”true” loginUrl=”Login.aspx” timeout=”2880″ path=”/” domain=”.local.com”/>
</authentication>
<!–验证算法–>
<machineKey validationKey=”F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902″ decryptionKey=”F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC” validation=”SHA1″ decryption=”3DES” /><compilation debug=”true”/>
以上就是关于machinekey什么意思全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!











