可能有朋友想对一张图片加密?(这样的描述是否很奇怪。)
然后自己可以解密,而别人不行?
那么不妨有个思路就是读入文件,然后对其二进制代码进行加密~揭秘的时候反之即可。
下面是演示代码~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace Net.Template.Common
{ /// <summary> /// 对图片的加密和解密 /// </summary> public class DEncrypt4ImageHelper
{ public DEncrypt4ImageHelper() { }
#region 加密方法 图片加密 /// <summary> /// 图片加密 /// </summary> /// <param name="filePath">源文件</param> /// <param name="savePath">保存为文件名称</param> /// <param name="keyStr">密钥</param> public static void EncryptFile( string filePath, string savePath, string keyStr)
{ //通过des加密 DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//通过流打开文件 FileStream fs = File.OpenRead(filePath); //获取文件二进制字符 byte[] inputByteArray = newbyte[fs.Length]; //读流文件 fs.Read(inputByteArray, 0, ( int )fs.Length);
//关闭流 fs.Close(); //获得加密字符串二进制字符 byte[] keyByteArray = Encoding.Default.GetBytes(keyStr); //计算指定字节组指定区域哈希值 SHA1 ha = new SHA1Managed();
byte [] hb = ha.ComputeHash(keyByteArray);
//加密密钥数组 byte[] sKey = newbyte[8]; //加密变量 byte[] sIV = newbyte[8]; for ( int i = 0; i < 8; i++)
sKey[i] = hb[i]; for ( int i = 8; i < 16; i++)
sIV[i - 8] = hb[i]; //获取加密密钥 des.Key = sKey; //设置加密初始化向量 des.IV = sIV; MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); fs = File.OpenWrite(savePath); foreach ( byte b in ms.ToArray())
{ fs.WriteByte(b); } fs.Close(); cs.Close(); ms.Close(); } #endregion#region 解密方法 图片解密 /// <summary> /// 图片解密 /// </summary> /// <param name="filePath">源文件</param> /// <param name="savePath">保存文件</param> /// <param name="keyStr">密钥</param> public static void DecryptFile( string filePath, string savePath, string keyStr)
{ //通过des解密 DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//通过流读取文件 FileStream fs = File.OpenRead(filePath); //获取文件二进制字符 byte[] inputByteArray = newbyte[fs.Length]; //读取流文件 fs.Read(inputByteArray, 0, ( int )fs.Length);
//关闭流 fs.Close(); //密钥数组 byte[] keyByteArray = Encoding.Default.GetBytes(keyStr); //定义哈希变量 SHA1 ha = new SHA1Managed();
//计算指定字节组指定区域哈希值 byte[] hb = ha.ComputeHash(keyByteArray); //加密密钥数组 byte[] sKey = newbyte[8]; //加密变量 byte[] sIV = newbyte[8]; for ( int i = 0; i < 8; i++)
sKey[i] = hb[i]; for ( int i = 8; i < 16; i++)
sIV[i - 8] = hb[i]; //获取加密密钥 des.Key = sKey; //加密变量 des.IV = sIV; MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); fs = File.OpenWrite(savePath); foreach ( byte b in ms.ToArray())
{ fs.WriteByte(b); } fs.Close(); cs.Close(); ms.Close(); } #endregion } } |
本文转自 OH51888 51CTO博客,原文链接:http://blog.51cto.com/rozbo/1286420,如需转载请自行联系原作者