2011年12月10日 星期六

tablesorter 排序插件





    


如此在 thead 標籤內的 th 可以排序。
參數設定:http://tablesorter.com/docs/#Configuration


如果要將GridView輸出時加入 thead 或 tfoot 標籤
 
    protected void GridView1_PreRender(object sender, EventArgs e)
    {
        if (GridView1.Rows.Count > 0)
        {
            GridView1.UseAccessibleHeader = true;
            GridView1.HeaderRow.TableSection = TableRowSection.TableHeader;
            GridView1.FooterRow.TableSection = TableRowSection.TableFooter;
        }
    }


用ASP.NET加密

如果你未曾留意你的機器裡有Cookie文件,可以按下列方法查看:打開IE,選擇「工具」菜單裡的「Internet選項」,然後在彈出的對話框裡點擊「設置」按鈕,在設置對話框裡點擊「查看」鈕,就會打開一個窗口顯示瀏覽器放在硬盤裡的所有緩存數據,其中就有大量的Cookie文件。

所以奉勸大家不要將敏感的用戶數據存放在Cookie中,要麼就通過加密將這些數據保護起來。

在以前的ASP版本中沒有加密的功能,現在.NET構架在System.Security.Cryptography命名空間裡提供了許多加密類可以利用。




一、.NET的密碼系統概要

簡單地說,加密就是將原始字符(字節)串轉變為完全不同的字符串的處理過程,達到原始字符無法破譯的目的。這個處理過程是用另一個字符串(稱為「密鑰」),採取複雜的、混合的算法,「搗進」原始字符串。有時還使用一個稱為「初始向量」的字符串,在密鑰搗進之前先打亂目標字符串,預防目標字符串中較明顯的內容被識破。加密的功效取決於所用密鑰的大小,密鑰越長,保密性越強。典型的密鑰長度有64位、128位、192位、256位和512位。攻擊者唯一的方法是創建一個程序嘗試每一個可能的密鑰組合,但64位密鑰也有72,057,594,037,927,936種組合。

目前有兩種加密方法:對稱加密(或稱私有密鑰)和非對稱加密(或稱公共密鑰)。對稱加密技術的數據交換兩邊(即加密方和解密方)必須使用一個保密的私有密鑰。非對稱加密技術中,解密方向加密方要求一個公共密鑰,加密方在建立一個公共密鑰給解密方後,用公共密鑰創建唯一的私有密鑰。加密方用私有密鑰加密送出的信息,對方用公共密鑰解密。保護HTTP傳輸安全的SSL就是使用非對稱技術。

我們對Cookie數據的加密採取對稱加密法。.NET構架從基本的SymmetricAlgorithm類擴展出來四種算法:

·System.Security.Cryptography.DES

·System.Security.Cryptography.TripleDES

·System.Security.Cryptography.RC2

·System.Security.Cryptography.Rijndael

下面將示範DES和TripleDES算法。DES的密鑰大小限制在64位,但用於Cookie的加密是有效的。TripleDES完成了三次加密,並有一個較大的密鑰位數,所以它更安全。使用那一種算法不僅要考慮加密強度,還要考慮Cookie的大小。因為加密後的Cookie數據將變大,並且,密鑰越大,加密後的數據就越大,然而Cookie數據的大小限制在4KB,這是一個必須考慮的問題。再者,加密的數據越多或算法越複雜,就會佔有更多的服務器資源,進而減慢整個站點的訪問速度。

二、創建一個簡單的加密應用類

.NET的所有加密和解密通過CryptoStream類別來處理,它衍生自System.IO.Stream,將字符串作為以資料流為基礎的模型,供加密轉換之用。下面是一個簡單的加密應用類的代碼:

Imports System.Diagnostics

Imports System.Security.Cryptography

Imports System.Text

Imports System.IO


Public Class CryptoUtil


'隨機選8個字節既為密鑰也為初始向量

Private Shared KEY_64() As Byte = {42, 16, 93, 156, 78, 4, 218, 32}

Private Shared IV_64() As Byte = {55, 103, 246, 79, 36, 99, 167, 3}


'對TripleDES,採取24字節或192位的密鑰和初始向量

Private Shared KEY_192() As Byte = {42, 16, 93, 156, 78, 4, 218, 32, _

15, 167, 44, 80, 26, 250, 155, 112, _

2, 94, 11, 204, 119, 35, 184, 197}

Private Shared IV_192() As Byte = {55, 103, 246, 79, 36, 99, 167, 3, _

42, 5, 62, 83, 184, 7, 209, 13, _

145, 23, 200, 58, 173, 10, 121, 222}


'標準的DES加密

Public Shared Function Encrypt(ByVal value As String) As String

If value <> "" Then

Dim cryptoProvider As DESCryptoServiceProvider = _

New DESCryptoServiceProvider()

Dim ms As MemoryStream = New MemoryStream()

Dim cs As CryptoStream = _

New CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_64, IV_64), _

CryptoStreamMode.Write)

Dim sw As StreamWriter = New StreamWriter(cs)


sw.Write(value)

sw.Flush()

cs.FlushFinalBlock()

ms.Flush()


'再轉換為一個字符串

Return Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length)

End If

End Function



'標準的DES解密

Public Shared Function Decrypt(ByVal value As String) As String

If value <> "" Then

Dim cryptoProvider As DESCryptoServiceProvider = _

New DESCryptoServiceProvider()


'從字符串轉換為字節組

Dim buffer As Byte() = Convert.FromBase64String(value)

Dim ms As MemoryStream = New MemoryStream(buffer)

Dim cs As CryptoStream = _

New CryptoStream(ms, cryptoProvider.CreateDecryptor(KEY_64, IV_64), _

CryptoStreamMode.Read)

Dim sr As StreamReader = New StreamReader(cs)


Return sr.ReadToEnd()

End If

End Function


'TRIPLE DES加密

Public Shared Function EncryptTripleDES(ByVal value As String) As String

If value <> "" Then

Dim cryptoProvider As TripleDESCryptoServiceProvider = _

New TripleDESCryptoServiceProvider()

Dim ms As MemoryStream = New MemoryStream()

Dim cs As CryptoStream = _

New CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_192, IV_192), _

CryptoStreamMode.Write)

Dim sw As StreamWriter = New StreamWriter(cs)


sw.Write(value)

sw.Flush()

cs.FlushFinalBlock()

ms.Flush()


'再轉換為一個字符串

Return Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length)

End If

End Function



'TRIPLE DES解密

Public Shared Function DecryptTripleDES(ByVal value As String) As String

If value <> "" Then

Dim cryptoProvider As TripleDESCryptoServiceProvider = _

New TripleDESCryptoServiceProvider()


'從字符串轉換為字節組

Dim buffer As Byte() = Convert.FromBase64String(value)

Dim ms As MemoryStream = New MemoryStream(buffer)

Dim cs As CryptoStream = _

New CryptoStream(ms, cryptoProvider.CreateDecryptor(KEY_192, IV_192), _

CryptoStreamMode.Read)

Dim sr As StreamReader = New StreamReader(cs)


Return sr.ReadToEnd()

End If

End Function


End Class

上面我們將一組字節初始化為密鑰,並且使用的是數字常量,如果你在實際應用中也這樣做,這些字節一定要在0和255之間,這是一個字節允許的範圍值。

三、創建一個Cookie的應用類

下面我們就創建一個簡單的類,來設置和獲取Cookies。

Public Class CookieUtil


'設置COOKIE *****************************************************


'SetTripleDESEncryptedCookie (只針對密鑰和Cookie數據)

Public Shared Sub SetTripleDESEncryptedCookie(ByVal key As String, _

ByVal value As String)

key = CryptoUtil.EncryptTripleDES(key)

value = CryptoUtil.EncryptTripleDES(value)


SetCookie(key, value)

End Sub


'SetTripleDESEncryptedCookie (增加了Cookie數據的有效期參數)

Public Shared Sub SetTripleDESEncryptedCookie(ByVal key As String, _

ByVal value As String, ByVal expires As Date)

key = CryptoUtil.EncryptTripleDES(key)

value = CryptoUtil.EncryptTripleDES(value)


SetCookie(key, value, expires)

End Sub



'SetEncryptedCookie(只針對密鑰和Cookie數據)

Public Shared Sub SetEncryptedCookie(ByVal key As String, _

ByVal value As String)

key = CryptoUtil.Encrypt(key)

value = CryptoUtil.Encrypt(value)


SetCookie(key, value)

End Sub


'SetEncryptedCookie (增加了Cookie數據的有效期參數)

Public Shared Sub SetEncryptedCookie(ByVal key As String, _

ByVal value As String, ByVal expires As Date)

key = CryptoUtil.Encrypt(key)

value = CryptoUtil.Encrypt(value)


SetCookie(key, value, expires)

End Sub



'SetCookie (只針對密鑰和Cookie數據)

Public Shared Sub SetCookie(ByVal key As String, ByVal value As String)

'編碼部分

key = HttpContext.Current.Server.UrlEncode(key)

value = HttpContext.Current.Server.UrlEncode(value)


Dim cookie As HttpCookie

cookie = New HttpCookie(key, value)

SetCookie(cookie)

End Sub


'SetCookie(增加了Cookie數據的有效期參數)

Public Shared Sub SetCookie(ByVal key As String, _

ByVal value As String, ByVal expires As Date)

'編碼部分

key = HttpContext.Current.Server.UrlEncode(key)

value = HttpContext.Current.Server.UrlEncode(value)


Dim cookie As HttpCookie

cookie = New HttpCookie(key, value)

cookie.Expires = expires

SetCookie(cookie)

End Sub


'SetCookie (只針對HttpCookie)

Public Shared Sub SetCookie(ByVal cookie As HttpCookie)

HttpContext.Current.Response.Cookies.Set(cookie)

End Sub


'獲取COOKIE *****************************************************


Public Shared Function GetTripleDESEncryptedCookieValue(ByVal key As String) _

As String

'只對密鑰加密

key = CryptoUtil.EncryptTripleDES(key)


'獲取Cookie值

Dim value As String

value = GetCookieValue(key)

'解密Cookie值

value = CryptoUtil.DecryptTripleDES(value)

Return value

End Function


Public Shared Function GetEncryptedCookieValue(ByVal key As String) As String

'只對密鑰加密

key = CryptoUtil.Encrypt(key)


'獲取Cookie值

Dim value As String

value = GetCookieValue(key)

'解密Cookie值

value = CryptoUtil.Decrypt(value)

Return value

End Function


Public Shared Function GetCookie(ByVal key As String) As HttpCookie

'編碼密鑰

key = HttpContext.Current.Server.UrlEncode(key)

Return HttpContext.Current.Request.Cookies.Get(key)

End Function


Public Shared Function GetCookieValue(ByVal key As String) As String

Try

'編碼在GetCookie裡完成

'獲取Cookie值

Dim value As String

value = GetCookie(key).Value

'解碼所存儲的值

value = HttpContext.Current.Server.UrlDecode(value)

Return value

Catch

End Try

End Function


End Class

上面的設置功能中,有些功能附加提供了Cookie有效期這個參數。不設置該參數,Cookie將只為瀏覽器會話才保存在內存中。為了設置永久的Cookie,就需要設置有效期參數。

上面我們對密鑰和Cookies值進行了編碼與解碼,其原因是Cookies與URLs有同樣的限制,字符「=」和「;」是保留的,不能使用。這在保存加密後的數據時尤其重要,因為加密算法將添加「=」,按所分配塊的大小來填滿該數據塊。 


轉載自:http://big5.webasp.net/article/15/14452.htm

加密與解密-DES


     /**** 參考出處
     http://big5.webasp.net/article/15/14452.htm
     ****/

    private byte[] KEY_64 = new byte[] { 42, 16, 93, 156, 78, 4, 218, 32 }; //密鑰
    private byte[] IV_64 = new byte[] { 55, 103, 246, 79, 36, 99, 167, 3 }; //初始化向量

    protected void btnEncryptor_Click(object sender, EventArgs e)
    {
        //加密
        DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_64, IV_64), CryptoStreamMode.Write);
        StreamWriter sw = new StreamWriter(cs);

        sw.Write(TextBox1.Text);
        sw.Flush();
        cs.FlushFinalBlock();
        ms.Flush();

        Label1.Text = Convert.ToBase64String(ms.GetBuffer(), 0, Int32.Parse(ms.Length.ToString()));
    }



    protected void btnDecryptor_Click(object sender, EventArgs e)
    {
        //解密
        DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
        Byte[] buffer = Convert.FromBase64String(Label1.Text);
        MemoryStream ms = new MemoryStream(buffer);
        CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateDecryptor(KEY_64, IV_64), CryptoStreamMode.Read);
        StreamReader sr = new StreamReader(cs);

        Label2.Text = sr.ReadToEnd();
    }

2011年6月26日 星期日

msdn 學習園地

http://msdn.microsoft.com/zh-tw/bb188199

DotNetAge(D.J) jQuery for ASP.NET

這是一個非常好用而且免費的 jQuery 套件。

下載位址:http://dj.codeplex.com/


教學文章:jQuery Control for ASP.NET:Server 端的 jQuery UI 控制項

http://msdn.microsoft.com/zh-tw/ee787054.aspx

2011年6月23日 星期四

更改資料表的名稱

EXEC sp_rename 'old name', 'new name'

SyntaxHighlighter uses separate syntax files called brushes to define its highlighting functionality.

Brush nameBrush aliasesFile name
ActionScript3as3, actionscript3shBrushAS3.js
Bash/shellbash, shellshBrushBash.js
ColdFusioncf, coldfusionshBrushColdFusion.js
C#c-sharp, csharpshBrushCSharp.js
C++cpp, cshBrushCpp.js
CSScssshBrushCss.js
Delphidelphi, pas, pascalshBrushDelphi.js
Diffdiff, patchshBrushDiff.js
Erlangerl, erlangshBrushErlang.js
GroovygroovyshBrushGroovy.js
JavaScriptjs, jscript, javascriptshBrushJScript.js
JavajavashBrushJava.js
JavaFXjfx, javafxshBrushJavaFX.js
Perlperl, plshBrushPerl.js
PHPphpshBrushPhp.js
Plain Textplain, textshBrushPlain.js
PowerShellps, powershellshBrushPowerShell.js
Pythonpy, pythonshBrushPython.js
Rubyrails, ror, rubyshBrushRuby.js
ScalascalashBrushScala.js
SQLsqlshBrushSql.js
Visual Basicvb, vbnetshBrushVb.js
XMLxml, xhtml, xslt, html, xhtmlshBrushXml.js

ASCII對照表

ASCII, American Standard Code for Information Interchange

念起來像是 "阿斯key",定義從 0 到 127 的一百二十八個數字所代表的英文字母或數字或符號,所有使用 ASCII

的電腦之間可以互相讀取同一份文件而不會有不一樣的結果與意義。由於只使用 7 個位元 (bit) 就可以表示從 0 到 127 的數字,大部分的電腦都使用

8 個位元來存取字元集 (character set),所以從 128 到 255 之間的數字可以用來代表另一組一百二十八個符號,稱為 extended

ASCII。
ASCII碼 鍵盤 ASCII 碼 鍵盤 ASCII 碼 鍵盤 ASCII 碼 鍵盤
27 ESC 32 SPACE 33 ! 34 "
35 # 36 $ 37 % 38 &
39 ' 40 ( 41 ) 42 *
43 + 44 ' 45 - 46 .
47 / 48 0 49 1 50 2
51 3 52 4 53 5 54 6
55 7 56 8 57 9 58 :
59 ; 60 < 61 = 62 >
63 ? 64 @ 65 A 66 B
67 C 68 D 69 E 70 F
71 G 72 H 73 I 74 J
75 K 76 L 77 M 78 N
79 O 80 P 81 Q 82 R
83 S 84 T 85 U 86 V
87 W 88 X 89 Y 90 Z
91 [ 92 \ 93 ] 94 ^
95 _ 96 ` 97 a 98 b
99 c 100 d 101 e 102 f
103 g 104 h 105 i 106 j
107 k 108 l 109 m 110 n
111 o 112 p 113 q 114 r
115 s 116 t 117 u 118 v
119 w 120 x 121 y 122 z
123 { 124 | 125 } 126 ~

字串轉ASCII碼

protected void Button1_Click(object sender, EventArgs e)
{

byte[] b = System.Text.Encoding.ASCII.GetBytes("dw33f");

Label1.Text = b[1].ToString();

Label2.Text =System.Text.Encoding.ASCII.GetString(b);

}

2011年6月4日 星期六

using jquery call webservice


2011年3月23日 星期三

SQL 得到新增後的索引值

INSERT INTO [Account] .......;
Select @PK_New = @@IDENTITY   //加入這一段

在SqlDataSource裡InsertParameters加入一個輸出項

protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e)
{
string id = e.Command.Parameters["@PK_New"].Value.ToString();
}


參考
SqlDataSource 與 DetailView 如何取得@@IDENTTY的值

2011年3月19日 星期六

SQL 數字加上千分位符號

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

當 expression 是 moneysmallmoney 時,style 就可以是下表所列的其中一個值。其他值則當做 0 處理。
style=1:小數點左側每隔三位數加一個逗號,小數點右側有兩位數;如 3,510.92。

SELECT CONVERT(NVARCHAR(20),CAST(556293295 AS Money),1)

結果為 556,293,295.00


CAST 和 CONVERT (Transact-SQL)

數字不足位數 於前端補0的方法

right('00'+cast(hour as varchar),2)
這個方法,是將數字型別先轉換成文字型別cast(hour as varchar),
強迫在最前端加上'00',
最後再取最右邊2位 right('some string',2)

RIGHT ( character_expression , integer_expression )


RIGHT (Transact-SQL)

SQL 時間相減

DATEDIFF ( datepart , startdate , enddate )

datepart

Abbreviations

year 

yy,yyyy

quater

qq, q

month

mm, m

dayofyear

dy, y

day

dd, d

week

wk, ww

hour

hh

minute

mi, n

second

ss, s

millisecond

ms

microsecond

mcs

nanosecond

ns

2011年3月17日 星期四

在部落格上張貼程式碼

SyntaxHighlighter 3.0.83

http://alexgorbatchev.com/SyntaxHighlighter/

各種語言Brush支援表
http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/

複製資料表

複製資料表 包含結構與資料:
SELECT *
INTO new_table
FROM old_table



複製資料表 只有結構:
SELECT *
INTO new_table
FROM old_table
WHERE 0=1

2011年3月4日 星期五

還是測試

    

測試

    /**
     * SyntaxHighlighter
     */
    function foo()
    {
        if (counter <= 10)
            return;
        // it works!
    }