PHP、JAVA、C#、Object-C 通用的DES加密
PHP、JAVA、C#、Object-C 通用的DES加密
PHP:
|
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
|
class JoDES { private static $_instance = NULL; /** * @return JoDES */ public static function share() { if (is_null(self::$_instance)) { self::$_instance = new JoDES(); } return self::$_instance; } /** * 加密 * @param string $str 要处理的字符串 * @param string $key 加密Key,为8个字节长度 * @return string */ public function encode($str, $key) { $size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC); $str = $this->pkcs5Pad($str, $size); $aaa = mcrypt_cbc(MCRYPT_DES, $key, $str, MCRYPT_ENCRYPT, $key); $ret = base64_encode($aaa); return $ret; } /** * 解密 * @param string $str 要处理的字符串 * @param string $key 解密Key,为8个字节长度 * @return string */ public function decode($str, $key) { $strBin = base64_decode($str); $str = mcrypt_cbc(MCRYPT_DES, $key, $strBin, MCRYPT_DECRYPT, $key); $str = $this->pkcs5Unpad($str); return $str; } function hex2bin($hexData) { $binData = ""; for ($i = 0; $i < strlen($hexData); $i += 2) { $binData .= chr(hexdec(substr($hexData, $i, 2))); } return $binData; } function pkcs5Pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } function pkcs5Unpad($text) { $pad = ord($text {strlen($text) - 1}); if ($pad > strlen($text)) return false; if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false; return substr($text, 0, - 1 * $pad); }} |
C#
|
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
|
public class MyDes { /// <summary> /// DES加密方法 /// </summary> /// <param name="strPlain">明文</param> /// <param name="strDESKey">密钥</param> /// <param name="strDESIV">向量</param> /// <returns>密文</returns> public static string Encode(string source, string _DESKey) { StringBuilder sb = new StringBuilder(); using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { byte[] key = ASCIIEncoding.ASCII.GetBytes(_DESKey); byte[] iv = ASCIIEncoding.ASCII.GetBytes(_DESKey); byte[] dataByteArray = Encoding.UTF8.GetBytes(source); des.Mode = System.Security.Cryptography.CipherMode.CBC; des.Key = key; des.IV = iv; string encrypt = ""; using (MemoryStream ms = new MemoryStream()) using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(dataByteArray, 0, dataByteArray.Length); cs.FlushFinalBlock(); encrypt = Convert.ToBase64String(ms.ToArray()); } return encrypt; } } /// <summary> /// 进行DES解密。 /// </summary> /// <param name="pToDecrypt">要解密的base64串</param> /// <param name="sKey">密钥,且必须为8位。</param> /// <returns>已解密的字符串。</returns> public static string Decode(string source, string sKey) { byte[] inputByteArray = System.Convert.FromBase64String(source);//Encoding.UTF8.GetBytes(source); using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) { des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); System.IO.MemoryStream ms = new System.IO.MemoryStream(); using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); cs.Close(); } string str = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return str; } } } |
Object-C
|
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
|
/*** JoDes.h ***/#import <Foundation/Foundation.h>#import <CommonCrypto/CommonDigest.h>#import <CommonCrypto/CommonCryptor.h>@interface JoDes : NSObject+ (NSString *) encode:(NSString *)str key:(NSString *)key;+ (NSString *) decode:(NSString *)str key:(NSString *)key;@end/*** JoDes.m ***///// XLEncrytHelper.m// NewHoldGold//// Created by 梁鑫磊 on 13-12-27.// Copyright (c) 2013年 zsgjs. All rights reserved.//#import "JoDes.h"@interface JoDes()+ (NSString *) encodeBase64WithString:(NSString *)strData;+ (NSString *) encodeBase64WithData:(NSData *)objData;+ (NSData *) decodeBase64WithString:(NSString *)strBase64;+ (NSString *)doCipher:(NSString *)sTextIn key:(NSString *)sKey context:(CCOperation)encryptOrDecrypt;@end@implementation JoDes+ (NSString *) encode:(NSString *)str key:(NSString *)key{ // doCipher 不能编汉字,所以要进行 url encode NSMutableString* str1 = [JoDes urlEncode:str]; NSMutableString* encode = [NSMutableString stringWithString:[JoDes doCipher:str1 key:key context:kCCEncrypt]]; [JoDes formatSpecialCharacters:encode]; return encode;}+ (NSString *) decode:(NSString *)str key:(NSString *)key{ NSMutableString *str1 = [NSMutableString stringWithString:str]; [JoDes reformatSpecialCharacters:str1]; NSString *rt = [JoDes doCipher:str1 key:key context:kCCDecrypt]; return rt;}+ (NSMutableString *)urlEncode:(NSString*)str{ NSMutableString* encodeStr = [NSMutableString stringWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; [encodeStr replaceOccurrencesOfString:@"+" withString:@"%2B" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [encodeStr length])]; [encodeStr replaceOccurrencesOfString:@"/" withString:@"%2F" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [encodeStr length])]; return encodeStr;}+ (void)formatSpecialCharacters:(NSMutableString *)str{ [str replaceOccurrencesOfString:@"+" withString:@"$$" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [str length])]; [str replaceOccurrencesOfString:@"/" withString:@"@@" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [str length])];}+ (void)reformatSpecialCharacters:(NSMutableString *)str{ [str replaceOccurrencesOfString:@"$$" withString:@"+" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [str length])]; [str replaceOccurrencesOfString:@"@@" withString:@"/" options:NSWidthInsensitiveSearch range:NSMakeRange(0, [str length])];}+ (NSString *)encodeBase64WithString:(NSString *)strData { return [JoDes encodeBase64WithData:[strData dataUsingEncoding:NSUTF8StringEncoding]];}+ (NSString *)encodeBase64WithData:(NSData *)objData { NSString *encoding = nil; unsigned char *encodingBytes = NULL; @try { static char encodingTable[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static NSUInteger paddingTable[] = {0,2,1}; NSUInteger dataLength = [objData length]; NSUInteger encodedBlocks = (dataLength * 8) / 24; NSUInteger padding = paddingTable[dataLength % 3]; if( padding > 0 ) encodedBlocks++; NSUInteger encodedLength = encodedBlocks * 4; encodingBytes = malloc(encodedLength); if( encodingBytes != NULL ) { NSUInteger rawBytesToProcess = dataLength; NSUInteger rawBaseIndex = 0; NSUInteger encodingBaseIndex = 0; unsigned char *rawBytes = (unsigned char *)[objData bytes]; unsigned char rawByte1, rawByte2, rawByte3; while( rawBytesToProcess >= 3 ) { rawByte1 = rawBytes[rawBaseIndex]; rawByte2 = rawBytes[rawBaseIndex+1]; rawByte3 = rawBytes[rawBaseIndex+2]; encodingBytes[encodingBaseIndex] = encodingTable[((rawByte1 >> 2) & 0x3F)]; encodingBytes[encodingBaseIndex+1] = encodingTable[((rawByte1 << 4) & 0x30) | ((rawByte2 >> 4) & 0x0F) ]; encodingBytes[encodingBaseIndex+2] = encodingTable[((rawByte2 << 2) & 0x3C) | ((rawByte3 >> 6) & 0x03) ]; encodingBytes[encodingBaseIndex+3] = encodingTable[(rawByte3 & 0x3F)]; rawBaseIndex += 3; encodingBaseIndex += 4; rawBytesToProcess -= 3; } rawByte2 = 0; switch (dataLength-rawBaseIndex) { case 2: rawByte2 = rawBytes[rawBaseIndex+1]; case 1: rawByte1 = rawBytes[rawBaseIndex]; encodingBytes[encodingBaseIndex] = encodingTable[((rawByte1 >> 2) & 0x3F)]; encodingBytes[encodingBaseIndex+1] = encodingTable[((rawByte1 << 4) & 0x30) | ((rawByte2 >> 4) & 0x0F) ]; encodingBytes[encodingBaseIndex+2] = encodingTable[((rawByte2 << 2) & 0x3C) ]; // we can skip rawByte3 since we have a partial block it would always be 0 break; } // compute location from where to begin inserting padding, it may overwrite some bytes from the partial block encoding // if their value was 0 (cases 1-2). encodingBaseIndex = encodedLength - padding; while( padding-- > 0 ) { encodingBytes[encodingBaseIndex++] = '='; } encoding = [[NSString alloc] initWithBytes:encodingBytes length:encodedLength encoding:NSASCIIStringEncoding]; } } @catch (NSException *exception) { encoding = nil; NSLog(@"WARNING: error occured while tring to encode base 32 data: %@", exception); } @finally { if( encodingBytes != NULL ) { free( encodingBytes ); } } return encoding; }+ (NSData *)decodeBase64WithString:(NSString *)strBase64 { NSData *data = nil; unsigned char *decodedBytes = NULL; @try {#define __ 255 static char decodingTable[256] = { __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x00 - 0x0F __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x10 - 0x1F __,__,__,__, __,__,__,__, __,__,__,62, __,__,__,63, // 0x20 - 0x2F 52,53,54,55, 56,57,58,59, 60,61,__,__, __, 0,__,__, // 0x30 - 0x3F __, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, // 0x40 - 0x4F 15,16,17,18, 19,20,21,22, 23,24,25,__, __,__,__,__, // 0x50 - 0x5F __,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, // 0x60 - 0x6F 41,42,43,44, 45,46,47,48, 49,50,51,__, __,__,__,__, // 0x70 - 0x7F __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x80 - 0x8F __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0x90 - 0x9F __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xA0 - 0xAF __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xB0 - 0xBF __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xC0 - 0xCF __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xD0 - 0xDF __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xE0 - 0xEF __,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__, // 0xF0 - 0xFF }; strBase64 = [strBase64 stringByReplacingOccurrencesOfString:@"=" withString:@""]; NSData *encodedData = [strBase64 dataUsingEncoding:NSASCIIStringEncoding]; unsigned char *encodedBytes = (unsigned char *)[encodedData bytes]; NSUInteger encodedLength = [encodedData length]; NSUInteger encodedBlocks = (encodedLength+3) >> 2; NSUInteger expectedDataLength = encodedBlocks * 3; unsigned char decodingBlock[4]; decodedBytes = malloc(expectedDataLength); if( decodedBytes != NULL ) { NSUInteger i = 0; NSUInteger j = 0; NSUInteger k = 0; unsigned char c; while( i < encodedLength ) { c = decodingTable[encodedBytes[i]]; i++; if( c != __ ) { decodingBlock[j] = c; j++; if( j == 4 ) { decodedBytes[k] = (decodingBlock[0] << 2) | (decodingBlock[1] >> 4); decodedBytes[k+1] = (decodingBlock[1] << 4) | (decodingBlock[2] >> 2); decodedBytes[k+2] = (decodingBlock[2] << 6) | (decodingBlock[3]); j = 0; k += 3; } } } // Process left over bytes, if any if( j == 3 ) { decodedBytes[k] = (decodingBlock[0] << 2) | (decodingBlock[1] >> 4); decodedBytes[k+1] = (decodingBlock[1] << 4) | (decodingBlock[2] >> 2); k += 2; } else if( j == 2 ) { decodedBytes[k] = (decodingBlock[0] << 2) | (decodingBlock[1] >> 4); k += 1; } data = [[NSData alloc] initWithBytes:decodedBytes length:k]; } } @catch (NSException *exception) { data = nil; NSLog(@"WARNING: error occured while decoding base 32 string: %@", exception); } @finally { if( decodedBytes != NULL ) { free( decodedBytes ); } } return data; }+ (NSString *)doCipher:(NSString *)sTextIn key:(NSString *)sKey context:(CCOperation)encryptOrDecrypt { NSStringEncoding EnC = NSUTF8StringEncoding; NSMutableData *dTextIn; if (encryptOrDecrypt == kCCDecrypt) { dTextIn = [[JoDes decodeBase64WithString:sTextIn] mutableCopy]; } else{ dTextIn = [[sTextIn dataUsingEncoding: EnC] mutableCopy]; } NSMutableData * dKey = [[sKey dataUsingEncoding:EnC] mutableCopy]; [dKey setLength:kCCBlockSizeDES]; uint8_t *bufferPtr1 = NULL; size_t bufferPtrSize1 = 0; size_t movedBytes1 = 0; //uint8_t iv[kCCBlockSizeDES]; //memset((void *) iv, 0x0, (size_t) sizeof(iv)); // Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF}; bufferPtrSize1 = ([sTextIn length] + kCCKeySizeDES) & ~(kCCKeySizeDES -1); bufferPtr1 = malloc(bufferPtrSize1 * sizeof(uint8_t)); memset((void *)bufferPtr1, 0x00, bufferPtrSize1); CCCrypt(encryptOrDecrypt, // CCOperation op kCCAlgorithmDES, // CCAlgorithm alg kCCOptionPKCS7Padding, // CCOptions options [dKey bytes], // const void *key [dKey length], // size_t keyLength // [dKey bytes], // const void *iv [dTextIn bytes], // const void *dataIn [dTextIn length], // size_t dataInLength (void *)bufferPtr1, // void *dataOut bufferPtrSize1, // size_t dataOutAvailable &movedBytes1); //[dTextIn release]; //[dKey release]; NSString * sResult; if (encryptOrDecrypt == kCCDecrypt){ sResult = [[NSString alloc] initWithData:[NSData dataWithBytes:bufferPtr1 length:movedBytes1] encoding:EnC]; free(bufferPtr1); } else { NSData *dResult = [NSData dataWithBytes:bufferPtr1 length:movedBytes1]; free(bufferPtr1); sResult = [JoDes encodeBase64WithData:dResult]; } return sResult;}@end |
JAVA
|
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
|
package com.example.aric.test;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import javax.crypto.spec.IvParameterSpec;import android.util.Base64;public class DES { public final static String DES_KEY_STRING = "ABSujsuu"; public static String encrypt(String message, String key) throws Exception { Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8")); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(desKeySpec); IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8")); cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv); return encodeBase64(cipher.doFinal(message.getBytes("UTF-8"))); } public static String decrypt(String message, String key) throws Exception { byte[] bytesrc = decodeBase64(message);//convertHexString(message); Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8")); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(desKeySpec); IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8")); cipher.init(Cipher.DECRYPT_MODE, secretKey, iv); byte[] retByte = cipher.doFinal(bytesrc); return new String(retByte); } public static byte[] convertHexString(String ss) { byte digest[] = new byte[ss.length() / 2]; for (int i = 0; i < digest.length; i++) { String byteString = ss.substring(2 * i, 2 * i + 2); int byteValue = Integer.parseInt(byteString, 16); digest[i] = (byte) byteValue; } return digest; } public static String toHexString(byte b[]) { StringBuffer hexString = new StringBuffer(); for (int i = 0; i < b.length; i++) { String plainText = Integer.toHexString(0xff & b[i]); if (plainText.length() < 2) plainText = "0" + plainText; hexString.append(plainText); } return hexString.toString(); } public static String encodeBase64(byte[] b) { return Base64.encodeToString(b, Base64.DEFAULT); } public static byte[] decodeBase64(String base64String) { return Base64.decode(base64String, Base64.DEFAULT); }} |
PHP、JAVA、C#、Object-C 通用的DES加密的更多相关文章
- 【DES加密解密】 C#&JAVA通用
DES加密解密 C# Code /// <summary> /// DES加密解密帮助类 /// </summary> public static class DESHelpe ...
- C#用DES加密JAVA用DES解密,JAVA用DES加密C#用DES解密的实现
这里贴出来的是可通用的C#与jav的DES加密类,希望对大家管用直接复制即可用 C#DES加密解密类 ///<summary><![CDATA[加密解密帮助类]]></s ...
- DES加密和解密PHP,Java,ObjectC统一的方法
原文:DES加密和解密PHP,Java,ObjectC统一的方法 PHP的加解密函数 <?php class DesComponent { var $key = '12345678'; func ...
- JDK1.8源码(一)——java.lang.Object类
本系列博客将对JDK1.8版本的相关类从源码层次进行介绍,JDK8的下载地址. 首先介绍JDK中所有类的基类——java.lang.Object. Object 类属于 java.lang 包,此包下 ...
- .Net使用DES加密,.Net和java分别解密,并正则匹配替换加密密码为明文
在VS中用WindowsApplication做一个exe程序,用来给数据库密码加密,加密代码如下 private void generateBtn_Click(object sender, Even ...
- PHP 识别 java 8位 des 加密和 解密方式
代码及使用说明: <?php /** *PHP 识别 java 8位密钥的加密和解密方式 *@desc 加密方式 通用 */ class DES { var $key; var $iv; //偏 ...
- .NET与 java通用的3DES加密解密方法
C#代码 private void button1_Click(object sender, EventArgs e) { string jiami = textBox1.Text; textBox2 ...
- (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题
我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...
- 理解JAVA - 面向对象(object) - 属性,方法
理解JAVA - 面向对象(object) - 属性,方法 多态的体现: 向上造型,父类接收子类对象:向上造型: 从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...
随机推荐
- Deep Learning 15:RBM的学习
RBM是深度学习的核心,所以必须彻底清楚地理解RBM原理.推导及其训练方法 1.读学位论文“基于深度学习的人脸识别研究”: 对RBM.DBN的介绍比较详细,可以作为基础阅读,再去读英文论文. 2.RB ...
- HTML“计算机输出”标签 <code><kbd><samp><tt><var><pre>
我们并不反对使用它们,但是如果您只是为了达到某种视觉效果而使用这些标签的话,我们建议您使用样式表,那么做会达到更加丰富的效果. <code> 标签-定义计算机代码文本. 定义和用法: &l ...
- JQ判断屏幕宽度
<script> if (screen.width < 768){....} </script>
- ASP.NET Redis 开发 [转]
Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redis纯粹为应用而产生,它是一个高性能的 ...
- CodeForces #367 div2 D Trie
题目链接:Vasiliy's Multiset 题意:这里有一个set容器,有三种操作,+ num, - num, ? num,分别代表往容器里加上num,或者拿走num,或着从容器里找一个数temp ...
- WCF初探-7:WCF服务配置工具使用
在上一篇WCF服务配置中,文章讲解了WCF的配置所需要的基本节点和属性构造,但是对于初学者的我们在编写程序的时候,往往对这些节点的位置和属性不是特别清楚,所以就导致我们的因配置文件错误而不能运行服务程 ...
- iOS开发UI篇—popoverController使用注意
iOS开发UI篇—popoverController使用注意 一.设置尺寸 提示:不建议,像下面这样吧popover的宽度和高度写死. //1.新建一个内容控制器 YYMenuViewControll ...
- Windows 7中无法访问FTP的解决方法
解决: netsh advfirewall set global StatefulFTP disable
- UITableViewCell左对齐的方法
if ([TabelView respondsToSelector:@selector(setLayoutMargins:)]) { [TabelView setLayoutMargin ...
- 2014年4月底至5月初51Aspx源码发布详情
精灵豆会员管理系统源码 2014-4-21 [VS2010]功能介绍:精灵豆会员管理系统业务管理平台采用微软选进的C#语言开发,采用大型数据库,具有比较高的执行效率和高安全性.系统分为消费管理,会员 ...