2014年12月22日 星期一

網管指令

ping -a IP
nbtstat -a IP
netstat -an

netsh int ip reset resettcpip.txt


netsh winsock reset

2014年12月19日 星期五

MS SQL運用ROW NUMBER耶得區間資料

select * from (
SELECT ROW_NUMBER() OVER(ORDER BY seq DESC) AS Row,
    Material_Cname,lot
FROM Y
) xyz where Row between 100 and 200

2014年12月8日 星期一

網頁Refresh秒數控制

讓網頁Refresh

在網頁開發上有時會讓Client端的頁面定時的自動對Server提出Request,其實這有幾種方法可用,下面我僅列出一個常用的方法,但還是覺得儘量不要有這樣的設計以避免Server過於忙碌而Loading太重了。
在HTML的間加入下面這段標籤內容:
content="10     表示10秒鍾就會Refresh。
url=DirectorTo.aspx"       表示Refresh後要跳到哪一個頁面,若是原來頁面亦可填寫原頁面的位置。

2014年12月3日 星期三

How to Place .NET Windows Forms Control To ASP.NET Web Form

引用
Clearly Drawing in a windows form is easier, accessing data and the way data is displayed are much different, etc...
So to go about this, we will first create a simple Windows application, and I'll show you later on in this tutorial how I will embed it within our page. We will use Windows Control Library instead of a new Windows application.
Open up visual studio, press File-->New-->Project.
Choose "Windows Control Library" and leave the other default settings.
In the control library, insert a label into your form and save your changes.
Make sure you Debug the project because we will need the dll file produced to be used within our web application.
Now close the solution and create a new website.
To do so, press File-->New-->Website. Give your site a name. Mine is web_project.
Now you will need your dll file produced in the previous project, copied to where your asp.net website is.
Usually, you should locate your dll file in "bin" folder of your project. Copy that dll and place it in the root of the website.
Now go back to your website in visual studio, and get the HTML code of the Default.aspx page.
Add the following code within the "form" tag:

<object id="myName"classid="http:WindowsControlLibrary1.dll#WindowsControlLibrary1.UserControl1"
height="70" width="350" VIEWASTEXT/>
Save your changes and Run the site. An alert will be prompted to you asking wether to trust the dll file or not.
Click Run to allow the dll to be launched in Internet Explorer.
This will load the dll file to your web page. It should look something like image below:

2014年11月30日 星期日

ASP.net 中在Client端換掉ImageButton mouse over的圖片

<asp:ImageButton   ID="ImageButton1"   runat="server"  onmouseover="this.src='001.png'"  ImageUrl="~/002.png"   onmouseout="this.src='002.png'" />

原圖是 002.png
但是滑過去之後 就換成 001.png
並且在滑鼠離開後 換還002.png

2014年11月28日 星期五

無法辨認的逸出序列

引用

在C語言中,「 \ 」反斜線加上n(即是\n),這就是逸出序列(Escape Sequences),這個「\」就是用來表示在之後所接字元並非「運算子」。因此,就會產生出字串的問題。
如:MessageBox.Show("C:\WINDOWS\system32");
會有「無法辨認的逸出序列」的錯誤,因此要改成以下
MessageBox.Show("C:\\WINDOWS\\system32"); //這樣才會通過編譯
不然也可以改成
MessageBox.Show(@"C:\WINDOWS\system32"); //在字串前面多加一個@,就可以了

2014年11月26日 星期三

Finding and Installing a NuGet Package

webmatrix
http://extensions.webmatrix.com/

NuGet Package Manager



https://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c

http://docs.nuget.org/docs/start-here/using-the-package-manager-console

使用NuGet小技巧

http://vmiv.blogspot.tw/2013/05/nuget.html

2014年11月13日 星期四

[JS]快速切換手機版網頁語法

引用

 一般用法:簡單判斷使用者的如果是使用 Android 或 iPhone 或 IPad 瀏覽,自動跳轉到指定的手機版網頁




進階用法:解決進入手機版,在點回首頁時,又被系統轉回手機版的情況。(2013/11/04 更新)
語法結構:
  1. 進到首頁時→自動判斷使用者的如果是使用 Android 或 iPhone 或 IPad 瀏覽,則跳轉到指定的手機版網頁
  2. 按下手機網頁上的電腦版按鈕可以正常看到電腦版網頁→ 手機板上的電腦版按鈕必須為網址網址後面加上?type=web ,網友如果點有?type=web版的,表示是從手機版跳回來的,不要再進入手機版成為鬼打牆的情況。

引用

比較完整

2014年11月7日 星期五

實戰 SQL Server 資料加/解密與應用程式整合

實戰 SQL Server 資料加/解密與應用程式整合

[VB.Net]10進制與2、8、16進制轉換

引用
1.10進制轉成2、8、16進制
1j=Convert.ToString(10, 2)        '10進制轉2進制     j="1010"
2j=Convert.ToString(11, 8)        '10進制轉8進制     j="13"
3j=Convert.ToString(254, 16)      '10進制轉16進制    j="FE"

2、8、16進制轉10進制
1i=Convert.ToInt32("1010", 2)     '2進制轉10進制  i=10
2i=Convert.ToInt32("13", 8)       '8進制轉10進制  i=11
3i=Convert.ToInt32("0XFE", 16)    '16進制轉10進制 i=254

參考:http://msdn.microsoft.com/zh-tw/library/system.convert.tostring.aspx
參考:http://msdn.microsoft.com/zh-tw/library/system.convert.toint32.aspx

SQL二進制轉換

http://jerryyang-wxy.blogspot.tw/2012/04/transact-sql-convert-binary-character.html


-INT(-a)  無條件進位
-FIX(-a) 無條件捨去
另外vb有內建四捨五入的函數 round(a)
============================
補充說明!經過測試使用round函數並不會完全4捨5入
2.5會變成2 
3.5才會變成4
所以要加上
round(0.5,0,MidpointRounding.AwayFromZero) 

NET上的對稱、非對稱、雜湊式加解密

引用

'『對稱式』加密,
'''此方法可將加密過的密碼做逆向的解密工作,
'''套用範圍較廣,但目前架構僅限於伺服器端的內容加密儲存方式,
'''此目的是為了不讓具有資料庫管理權限的管理者直接看到一些
'''屬於公司內部的機密資料或是重要資料,而造成資料外洩的情況發生。
'
'-----------------------------------------------------------------------------------------------------------------
'
'此架構必須設計三個儲存『對稱演算法的秘密金鑰SecretKey』、『對稱演算法的起始向量SecretIV』及
'『加密後Base64內容字串EncryptedString』欄位
'以機密內容加密為例:
'加密時:由外部輸入欲加密字串內容後,程式會自動產生『對稱演算法的秘密金鑰』、『對稱演算法的起始向量』,
'        上述兩個資料是為瞭解密之用,因此你在前端程式必須將之儲存於資料庫欄位中,以利解密時取出之用。
'        隨後產生加密後的內容字串,此字串我們再使用Base64來做一次處理,加強加密內容的複雜度,
'        當然加密的欄位也必須儲存起來。
'       
'解密時:我們可以從資料庫取出先前加密時產生的『對稱演算法的秘密金鑰』、『對稱演算法的起始向量』,
'        另外取出加密後的字串來做解密工作。       
'
'-----------------------------------------------------------------------------------------------------------------

Imports System
Imports System.Text
Imports System.IO
Imports System.Security.Cryptography
Namespace Util.Encrypt
    Public Class Symmetric
#Region "變數宣告"
        Private mEncryptSrcStr As String
        Private mDecryptSrcStr() As Byte
        Private mEncrypt As String
        Private mDecrypt As String
        Private mSakey As String
        Private mSaIV As String
        Private mDSaKey() As Byte
        Private mDSaIV() As Byte
#End Region
#Region "屬性宣告"
        Public WriteOnly Property EncryptSrcStr() As String ''來源欲加密字串
            Set(ByVal Value As String)
                mEncryptSrcStr = Value
            End Set
        End Property
        Public WriteOnly Property DecryptSrcStr() As String ''來源欲解密字串
            Set(ByVal Value As String)
                mDecryptSrcStr = Convert.FromBase64String(Value)
            End Set
        End Property
        Public ReadOnly Property EncryptedString() As String ''加密後字串
            Get
                Return mEncrypt
            End Get
        End Property
        Public ReadOnly Property DecryptedString() As String ''解密後字串
            Get
                Return mDecrypt
            End Get
        End Property
        Public ReadOnly Property SecretKey() As String ''密鑰字串KEY秘密金鑰
            Get
                Return mSakey
            End Get
        End Property
        Public ReadOnly Property SecretIV() As String ''密鑰字串IV起始向量
            Get
                Return mSaIV
            End Get
        End Property

        Public WriteOnly Property DeSecretKey() As String ''密鑰字串KEY秘密金鑰
            Set(ByVal Value As String)
                mDSaKey = Convert.FromBase64String(Value)
            End Set
        End Property
        Public WriteOnly Property DeSecretIV() As String  ''密鑰字串IV起始向量
            Set(ByVal Value As String)
                mDSaIV = Convert.FromBase64String(Value)
            End Set
        End Property

#End Region
        Public Sub New()
        End Sub
        Public Function EcryptSymmetric() As Boolean ''對稱式加密
            '''==產生密鑰
            Dim sa As SymmetricAlgorithm
            Dim tmpSa As ICryptoTransform
            sa = Rijndael.Create()                  'AES (Rijndael) is a symmetric-key block cipher
            sa.GenerateKey()                        '產生隨機的 (32*8) 位的密鑰
            sa.Mode = CipherMode.ECB                '區串流優先等級處理模式
            sa.Padding = PaddingMode.Zeros          '末尾資料區串流優先等級的填充模式
            mSakey = Convert.ToBase64String(sa.Key) '取得SymmetricAlgorithm的對稱演算法的秘密金鑰
            mSaIV = Convert.ToBase64String(sa.IV)   '取得SymmetricAlgorithm的對稱演算法的起始向量
            tmpSa = sa.CreateEncryptor(Convert.FromBase64String(mSakey), Convert.FromBase64String(mSaIV))
            '''==============================================================================================
            Dim ms As MemoryStream
            Dim cs As CryptoStream
            Dim Bufffer As Byte() = New Byte() {}
            ms = New MemoryStream
            cs = New CryptoStream(ms, tmpSa, CryptoStreamMode.Write)
            If mEncryptSrcStr <> String.Empty Then
                Bufffer = Encoding.UTF8.GetBytes(mEncryptSrcStr)
                cs.Write(Bufffer, 0, Bufffer.Length)
                cs.FlushFinalBlock()
                cs.Close()
                cs = Nothing
                mEncrypt = String.Empty
                mEncrypt = Convert.ToBase64String(ms.ToArray()) '加密後BASE64內容字串
                If mEncrypt <> String.Empty Then
                    Return True
                Else
                    Return False
                End If
                ms.Close()
            Else
                Throw New System.Exception("Error,加密原始字串內容是空值!")
            End If

        End Function

        Public Function DecryptSymmetric() As Boolean ''對稱式解密
            Dim ms As MemoryStream
            Dim sa As SymmetricAlgorithm
            Dim tmpSa As ICryptoTransform
            Dim cs As CryptoStream
            ms = New MemoryStream
            sa = Rijndael.Create()                  'AES (Rijndael) is a symmetric-key block cipher
            sa.Mode = CipherMode.ECB                '區串流優先等級處理模式
            sa.Padding = PaddingMode.Zeros          '末尾資料區串流優先等級的填充模式
            sa.Key = mDSaKey
            sa.IV = mDSaIV
            tmpSa = sa.CreateDecryptor
            cs = New CryptoStream(ms, tmpSa, CryptoStreamMode.Write)
            cs.Write(mDecryptSrcStr, 0, mDecryptSrcStr.Length)
            cs = Nothing
            mDecrypt = Encoding.UTF8.GetString(ms.ToArray()) '解密後內容字串
            If mDecrypt <> String.Empty Then
                Return True
            Else
                Return False
            End If
        End Function

    End Class
End Namespace

'------------------------------------------------------------------
'『非對稱式』加密,
'''此方法無法將加密過的密碼做逆向的解密工作,
'''通常適用於會員機制的伺服器端的密碼欄位儲存方式,
'''此目的是為了不讓具有資料庫管理權限的管理者直接看到使用者密碼,
'''而造成使用者密碼不當曝光的情況發生。
'
'------------------------------------------------------------------
'
'此架構必須設計兩個儲存『加密後密碼』及『加密的亂數』欄位
'以會員機制為例:
'註冊時:新的使用者註冊時會輸入密碼,儲存時我們便可使用
'        CreateSalt()加密的亂數及CreateHash()加密亂數
'        儲存於資料庫中。
'登入時:使用者會輸入帳戶及密碼,此時前端輸入的密碼為未加密過的密碼
'        ,此時將此密碼經過先前產生出來的『加密的亂數』再做一次
'        CreateHash()產生的加密密碼後,與原來資料庫內儲存的密碼做
'        比對即可,上述方法可呼叫CheckAuthentication()即可。       
'
'------------------------------------------------------------------
Imports System
Imports System.Text
Imports System.IO
Imports System.Security.Cryptography
Imports System.Web.Security.FormsAuthentication
Namespace Util.Encrypt
    Public Class Asymmetric
        ''CreateSalt 產生經過 RNGCryptoServiceProvider 所加密的亂數
        ''這是被用來傳遞給CreateHash()做串連使用者前端畫面所輸入的密碼之方法
        Public Function CreateSalt() As String
            Dim rng As RNGCryptoServiceProvider = New RNGCryptoServiceProvider '實作密碼編譯亂數產生器 (RNG)。
            Dim size As Integer
            size = CInt(Int((20 * Rnd()) + 1))
            Dim buff() As Byte = New Byte(size) {}
            rng.GetBytes(buff)
            Return Convert.ToBase64String(buff)
        End Function
        ''CreateHash 產生雜湊運算後的字串
        ''salt 為CreateSalt() 所產生的加密字串
        ''pwd 為前端使用者在畫面所輸入的密碼
        Public Function CreateHash(ByVal pwd As String, ByVal salt As String) As String
            Dim saltPwd As String = String.Concat(pwd, salt)
            Dim data() As Byte = Encoding.UTF8.GetBytes(saltPwd)
            Dim result() As Byte
            Dim shaM As New SHA1Managed
            result = shaM.ComputeHash(data)
            Dim hashPwd As String = Convert.ToBase64String(result)
            Return hashPwd
        End Function
        ''pwd 未加密過的密碼,也就是前端使用者所輸入的密碼
        ''hashedPwd 已儲存在資料庫中且加密過的密碼
        ''salt 已儲存在資料庫中且經過 RNGCryptoServiceProvider 所產生的加密亂數
        Public Function CheckAuthentication(ByVal pwd As String, ByVal salt As String, ByVal hashedPwd As String) As Boolean
            Dim hashPwdcmp As String = CreateHash(pwd, salt)
            Dim cp As Boolean
            If hashedPwd.Equals(hashPwdcmp) Then
                cp = True
            Else
                cp = False
            End If
            Return cp
        End Function
    End Class
End Namespace

ASP.NET的WEB.CONFIG連接字串加密

引用

之前我們實作asp.net與sql server遠端連接時,有提到,我們將連接字串存放到web.config中是不安全的,為什麼?因為,雖然在Client瀏覽時是看不到web.config的內容,但是在管理、開發小組中的每一個成員都看得一清二楚。為了避免造成系統安全不必要的負擔,ASP.NET提供加密工具來加密碼web.config中的連線資訊。

  另外要提醒的是,加密的時機。因為在系統執行加密時預設的金鑰來自於執行應用程式的「電腦設備」。一旦你將此web.config部署至其他電腦設備,ASP.NET將無法對它進行解密,因為部署的電腦設備沒有私密金鑰。

  也就是說,你不要很高興撰寫完所有程式,然後很聰明,為了安全,很高興在自己本機加密web.config中的資訊,然後上傳到伺服器,然後……對,你就會看到一堆錯誤訊息。所以記住:在要提供服務的Server加密web.config資訊。

  另外,為了不必要的麻煩,執行以下命令時,請關閉VWD開發工具。

  1. 按一下「開始 --> 執行 --> cmd」
  2. 輸入「cd c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727」
  3. 如果網站根目錄是:C:\Inetpub\wwwroot,請輸入下列命令:
    「aspnet_regiis.exe -pef connectionstrings C:\Inetpub\wwwroot」
    如果我們要修改連線資訊,需要解密:
    「aspnet_regiis.exe -pdf connectionstrings C:\Inetpub\wwwroot」
  整個命令很簡單,-pef後指定要加密的標記(tag),然後指定web.config所在的路徑,-pdf同義。加密後,再打開web.config,查看連線字串標記,你就會看到一堆的亂碼。

  再重複一次,加、解密請在同一台電腦。

使用DES加密解密代碼(C# & vb.Net)

引用
C#
-----------------------------------------------
//名稱空間  
using  System;  
using  System.Security.Cryptography;  
using  System.IO;  
using  System.Text;  

//方法  
//加密方法  
public    string  Encrypt(string  pToEncrypt,  string  sKey)  
{  
           DESCryptoServiceProvider  des  =  new  DESCryptoServiceProvider();  
           //把字符串放到byte數組中  
                 //原來使用的UTF8編碼,我改成Unicode編碼了,不行  
           byte[]  inputByteArray  =  Encoding.Default.GetBytes(pToEncrypt);  
           //byte[]  inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);  

           //建立加密對象的密鑰和偏移量  
           //原文使用ASCIIEncoding.ASCII方法的GetBytes方法  
           //使得輸入密碼必須輸入英文文本  
           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);  
           //Write  the  byte  array  into  the  crypto  stream  
           //(It  will  end  up  in  the  memory  stream)  
           cs.Write(inputByteArray,  0,  inputByteArray.Length);  
           cs.FlushFinalBlock();  
           //Get  the  data  back  from  the  memory  stream,  and  into  a  string  
           StringBuilder  ret  =  new  StringBuilder();  
           foreach(byte  b  in  ms.ToArray())  
                       {  
                       //Format  as  hex  
                       ret.AppendFormat("{0:X2}",  b);  
                       }  
           ret.ToString();  
           return  ret.ToString();  
}  

//解密方法  
public    string  Decrypt(string  pToDecrypt,  string  sKey)  
{  
           DESCryptoServiceProvider  des  =  new  DESCryptoServiceProvider();  

           //Put  the  input  string  into  the  byte  array  
           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);  
           //Flush  the  data  through  the  crypto  stream  into  the  memory  stream  
           cs.Write(inputByteArray,  0,  inputByteArray.Length);  
           cs.FlushFinalBlock();  

           //Get  the  decrypted  data  back  from  the  memory  stream  
           //建立StringBuild對象,CreateDecrypt使用的是流對象,必須把解密後的文本變成流對像  
           StringBuilder  ret  =  new  StringBuilder();  
             
           return  System.Text.Encoding.Default.GetString(ms.ToArray());  
}  
-------------------------------------------------------
vb.Net :
-------------------------------------------------------
Imports System.Web.Security
Imports System.Security
Imports System.Security.Cryptography
Imports System.Text

Public Shared Function Encrypt(ByVal pToEncrypt As String, ByVal sKey As String) As String
     Dim des As New DESCryptoServiceProvider()
     Dim inputByteArray() As Byte
     inputByteArray = Encoding.Default.GetBytes(pToEncrypt)
     '建立加密對象的密鑰和偏移量
     '原文使用ASCIIEncoding.ASCII方法的GetBytes方法
     '使得輸入密碼必須輸入英文文本
     des.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
     des.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
     '寫二進制數組到加密流
     '(把內存流中的內容全部寫入)
     Dim ms As New System.IO.MemoryStream()
     Dim cs As New CryptoStream(ms, des.CreateEncryptor, CryptoStreamMode.Write)
     '寫二進制數組到加密流
     '(把內存流中的內容全部寫入)
     cs.Write(inputByteArray, 0, inputByteArray.Length)
     cs.FlushFinalBlock()

     '建立輸出字符串     
     Dim ret As New StringBuilder()
     Dim b As Byte
     For Each b In ms.ToArray()
         ret.AppendFormat("{0:X2}", b)
     Next

     Return ret.ToString()
End Function

        '解密方法
Public Shared Function Decrypt(ByVal pToDecrypt As String, ByVal sKey As String) As String
     Dim des As New DESCryptoServiceProvider()
     '把字符串放入byte數組
     Dim len As Integer
     len = pToDecrypt.Length / 2 - 1
     Dim inputByteArray(len) As Byte
     Dim x, i As Integer
     For x = 0 To len
         i = Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)
         inputByteArray(x) = CType(i, Byte)
     Next
     '建立加密對象的密鑰和偏移量,此值重要,不能修改
     des.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
     des.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
     Dim ms As New System.IO.MemoryStream()
     Dim cs As New CryptoStream(ms, des.CreateDecryptor, CryptoStreamMode.Write)
     cs.Write(inputByteArray, 0, inputByteArray.Length)
     cs.FlushFinalBlock()
     Return Encoding.Default.GetString(ms.ToArray)

End Function
------------------------------------------------
備註:
1. sKey輸入密碼的時候,必須使用英文字符,區分大小寫,且字符數量是8個,不能多也不能少,否則出錯。
2. asp.net1.1,vs.net2003,windows2003 server環境下C#和vb.net分別調試成功!