① C# 加密、解密 XML 文件操作
以下給出里兩種加密方法1,MD5 ;2,RSA
MD5加密如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
namespace 數據加密與解密
{
public partial class frmMD5 : Form
{
public frmMD5()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{ MessageBox.Show("請輸入加密數據"); return; }
MD5CryptoServiceProvider M5 = new MD5CryptoServiceProvider();
textBox2.Text = ASCIIEncoding.ASCII.GetString(M5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(textBox1.Text)));
}
//MD5是不可的演算法。破解只有用暴力破解法
private void button2_Click(object sender, EventArgs e)
{
MD5CryptoServiceProvider M5 = new MD5CryptoServiceProvider();
//this.textBox3.Text=M5.
}
}
}
RSA加密如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
namespace 數據加密與解密
{
public partial class frmRSA : Form
{
public frmRSA()
{
InitializeComponent();
this.Text = "RSA加密解密";
tb_Encrypt.ReadOnly = true;
tb_Decrypt.ReadOnly = true;
}
private void button1_Click(object sender, EventArgs e)
{
//使用默認密鑰創建RSACryptoServiceProvider對象
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
//顯示包含公鑰/私鑰對的XML表示形式,如果只顯示公鑰,將參數改為false即可
rtb_Keys.Text = rsa.ToXmlString(true);
//將被加密的字元串轉換為位元組數組
byte[] dataToEncrypt = Encoding.UTF8.GetBytes(tb_Input.Text);
try
{
//得到加密後的位元組數組
byte[] encryptedData = rsa.Encrypt(dataToEncrypt, false);
tb_Encrypt.Text = Encoding.UTF8.GetString(encryptedData);
//得到解密後的位元組數組
byte[] decryptedData = rsa.Decrypt(encryptedData, false);
tb_Decrypt.Text = Encoding.UTF8.GetString(decryptedData);
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
}
}
② 在layout.xml布局文件里,設置一個EditText的顯示為密碼加密,這行代碼應該怎麼寫
設置inputType為textPassword即可實現輸入框隱藏文字效果
完整如下:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
/>
③ c#加密xml文件
xml加密(XML Encryption)是w3c加密xml的標准。這個加密過程包括加密xml文檔的元素及其子元素,通過加密,xml的初始內容將被替換,但其xml格式仍然被完好的保留。 介紹 我們有3個加密xml的方法 1、僅僅使用對稱加密的方法加密xml 這種加密方法只使用一個密鑰,也就是說無論是加密xml還是解密xml都使用一個相同的密鑰。因為這個密鑰不會在被加密的xml中保存,所以我們需要在加密和解密的過程中載入這個密鑰並保護它不被竊取。 2、使用對稱加密和非對稱加密相結合的方法來加密xml 這種方法需要一個用於加密數據的對稱密鑰和一個用於保護這個對稱密鑰的非對稱密鑰。被加密的對稱密鑰和被加密的數據一起保存在xml文檔中。當用私有非對稱密鑰解密密鑰的時候要用公開非對稱密鑰對密鑰進行加密。 本文就將使用這種方法。想學到其他更多的方法請參看MSDN等到更多的信息。 (譯者註:非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法。) 3、使用X.509加密xml,這種方法是用X.509作為非對稱密鑰,它由諸如VeriSign之類的第三方提供。 該網站有具體方法,請查閱 http://hi..com/jam12315/blog/item/42b5c4c426ee15af8326ac3b.html 參考文獻: tp://dotnetslackers.com/articles/xml/XMLEncryption.aspx
滿意請採納
④ 如何使用C#加密解密XML文檔
可以用DES對稱加/解密。XML文檔讀寫我就簡單的用一個序列化的例子了。我只寫加/解/序列化,怎麼顯示你隨意了。
1、建立一個Student的類了,四個屬性
public class Student
{
public string SID { get; set; }
public string Name { get; set; }
public string Score { get; set; }
public string Address { get; set; }
}
2、在你要加/解的頁面加Using
using System.Security.Cryptography;
using System.IO;
using System.Xml.Serialization;
就是序列化、加密、IO了
3、寫兩個方法,加/解
/// <summary>
/// DES的加密方法
/// </summary>
/// <param name="pToEncrypt"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public string Encrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.Zeros;
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}
/// <summary>
/// DES的解密
/// </summary>
/// <param name="pToDecrypt"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public string Decrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.Zeros;
byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for (int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray()).TrimEnd('\0');
}
//上面為什麼要TrimEnd,因為ms.ToArray()裡面以8位為單位增長,你字元串長11位,這里就是16位,最後面是\0字元,去掉就行。
4、調用加解就很簡單了。
private void button1_Click(object sender, EventArgs e)
{
string Key = "12345678"; //DES的密鑰,8位字元串,不要用中文,如果要解密,這個密鑰也是一樣的。
List<Student> list = new List<Student>()
{
new Student(){ SID="1", Name="張三", Score="87.5", Address="A小區asfasdf"},
new Student(){ SID="2", Name="李四", Score="77.5", Address="B小區asdfsdf"},
new Student(){ SID="3", Name="王五", Score="67.5", Address="C小區23412423434535345"},
};
//假定要加密的是分數和地址
foreach (var obj in list)
{
obj.Score = Encrypt(obj.Score, Key);
obj.Address = Encrypt(obj.Address, Key);
}
XmlSerializer xs = new XmlSerializer(typeof(List<Student>)); //序列化建立xml
Stream stream = new FileStream(@"d:\12345.XML", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
xs.Serialize(stream, list);
stream.Close();
}
上面是寫一些數據,然後加密兩個屬性:Score和Address。存到D盤
解就是反過來呀。
private void button2_Click(object sender, EventArgs e)
{
string Key = "12345678"; //DES的密鑰
XmlSerializer xs = new XmlSerializer(typeof(List<Student>));
Stream stream = new FileStream(@"d:\\12345.XML", FileMode.Open, FileAccess.Read, FileShare.Read);
var str = xs.Deserialize(stream);
stream.Close();
var list = (List<Student>)str; //轉回List
foreach (var obj in list)
{
obj.Score = Decrypt(obj.Score, Key);
obj.Address = Decrypt(obj.Address, Key);
}
}
其實加解密方法有好多,如果有針對整個XML文件進行壓縮、加密的代碼可發出來一共學習