[nodejs][.net]加解密

c# code

public class DecryptHelper
    {
        /// <summary>
        /// 做AES的解密 PKCS5Padding補碼
        /// </summary>
        /// <param name="text">解密的字串</param>
        /// <param name="key">key</param>
        /// <param name="iv">iv</param>
        /// <returns>解密後的字串</returns>
        public  string DecryptAES(string text, string key, string iv)
        {
            //var encryptBytes = System.Convert.FromBase64String(text);
            var encryptBytes = hex2byte(text);
            var aes = new System.Security.Cryptography.RijndaelManaged();
            aes.Mode = System.Security.Cryptography.CipherMode.CBC;
            aes.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
            aes.Key = System.Text.Encoding.ASCII.GetBytes(key);
            aes.IV = System.Text.Encoding.UTF8.GetBytes(iv);
            var transform = aes.CreateDecryptor();
            return System.Text.Encoding.UTF8.GetString(transform.TransformFinalBlock(encryptBytes, 0, encryptBytes.Length));

        }

        private  byte[] hex2byte(string strhex)
        {
            if (strhex == null)
            {
                return null;
            }
            int l = strhex.Length;
            if (l % 2 == 1)
            {
                return null;
            }
            byte[] b = new byte[l / 2];
            for (int i = 0; i != l / 2; i++)
            {
                b[i] = Convert.ToByte(strhex.Substring(i * 2, 2),
                        16);
            }
            return b;
        }
    }
  public class EncryptHelper
    {
        public string EncryptionBySHA256AndUrlEncode(string str)
        {
            return Uri.EscapeDataString(EncryptionBySHA256(str));//輸出結果
        }
        public string EncryptionBySHA256(string password)
        {
            if (password == null || password == "" || password == string.Empty)
                throw new Exception("EncryptionHelper-->EncryptionBySHA256  password is empty");
            try
            {
                SHA256 sha256 = new SHA256CryptoServiceProvider();//建立一個SHA256
                byte[] source = Encoding.Default.GetBytes(password);//將字串轉為Byte[]
                byte[] crypto = sha256.ComputeHash(source);//進行SHA256加密
                string result = Convert.ToBase64String(crypto);//把加密後的字串從Byte[]轉為字串
                return result;//輸出結果
            }
            catch (Exception e)
            {
                throw new Exception("EncryptionBySHA256 error " + e.ToString());
            }
        }


        /// <summary>
        /// 做AES的加密 PKCS5Padding補碼
        /// </summary>
        /// <param name="text">加密的字串</param>
        /// <param name="key">key</param>
        /// <param name="iv">iv</param>
        /// <returns>加密後的字串</returns>
        public string EncryptAES(string text, string key, string iv)
        {
            var sourceBytes = System.Text.Encoding.UTF8.GetBytes(text);
            var aes = new System.Security.Cryptography.RijndaelManaged();
            aes.Mode = System.Security.Cryptography.CipherMode.CBC;
            aes.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
            aes.Key = System.Text.Encoding.UTF8.GetBytes(key);
            aes.IV = System.Text.Encoding.UTF8.GetBytes(iv);
            var transform = aes.CreateEncryptor();
            return byte2hex(transform.TransformFinalBlock(sourceBytes, 0, sourceBytes.Length)).ToUpper();
        }

        private string byte2hex(byte[] b)
        {
            return BitConverter.ToString(b).Replace("-", "").ToUpper();
        }
    }

呼叫方式

    Dim IVAES As String = "20211208125030AV"
    Dim KEYAES As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef"

'加密
Dim AES As New AES.EncryptHelper
       
        txtEpcy.Text = AES.EncryptAES(txtOrg.Text, KEYAES, IVAES)
'解密
Dim AES As New AES.DecryptHelper
        txtOrg.Text = AES.DecryptAES(txtEpcy.Text, KEYAES, IVAES)

nodejs

const Rijndael = require('rijndael-js');
const padder = require('pkcs7-padding');


const plainText = Buffer.from('OOXXZZ', 'utf8');

const padded = padder.pad(plainText, 16); //Use 32 = 256 bits block sizes,16=128 bits block sizes

const iv = stringToByteArray('20211208125030AV'); //16
const key = stringToByteArray('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef'); //32 

const cipher = new Rijndael(key, 'cbc'); //CBC mode
const encrypted = cipher.encrypt(padded, 128, iv);
var text=toHexString(encrypted);
console.log(text);




const decryptedPadded = cipher.decrypt(toByteArray(text), 128, iv);
const decrypted = padder.unpad(decryptedPadded, 16);
const clearText = Buffer.from(decrypted, 'utf8').toString();

console.log(clearText);

function stringToByteArray(s) {

    // Otherwise, fall back to 7-bit ASCII only
    var result = new Uint8Array(s.length);
    for (var i = 0; i < s.length; i++) {
        result[i] = s.charCodeAt(i);/* w ww. ja  v  a 2s . co  m*/
    }
    return result;
}
function toByteArray(text) {
    let Arr=[];
    let Size = text.length;
    let Ii = 0;
    let tmp = "";
    for (Ii = 0; Ii < Size ; Ii=Ii+2) {
        tmp = text.substring(Ii, Ii + 2);
        //console.log("找到:" + tmp);
        Arr.push(Number("0x" + tmp));

    }
    return Arr;
}
function toHexString(byteArray) {
    return Array.from(byteArray, function (byte) {
        return ('0' + (byte & 0xFF).toString(16).toUpperCase()).slice(-2);
    }).join('')
}

結果是

C272F8B1012302282879DFE20ED6B3E5
sefsgdthfjutyikyugku

[windows]如何指定兩張網卡走不同的網路

如果上網被阻擋,用手機連線走外網,公司內部wifi走內網的設定方式,用admin權限執行cmd

1.顯示規則

route print

可以看到目前有兩個網路,分別為 10.202.18.253 跟 192.168.178.59

要讓192.168.178.59 連線外部網路

要讓10.202.18.253連線內部網路

先清空預設值

route delete 0.0.0.0

設定外網網路

route add 0.0.0.0 mask 0.0.0.0 192.168.178.59

設定內網網路

route add 10.0.0.0 mask 255.0.0.0 10.202.18.253

完成

或者

route delete 0.0.0.0 mask 0.0.0.0 內網IP

這樣只需要一步驟