[nodejs]去掉控制字元
有時候加解密後多了一些討人厭的控制字元導致轉Json出現錯誤
str.replace(/[\u0000-\u001F\u007F-\u009F]/g, "")
這樣就可以了
有時候加解密後多了一些討人厭的控制字元導致轉Json出現錯誤
str.replace(/[\u0000-\u001F\u007F-\u009F]/g, "")
這樣就可以了
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
sudo mount -t cifs -o username="使用者",password="密碼" //伺服器IP/資料夾 /mnt/smb
umount /mnt/smb
不行的話就是
sudo apt-get install cifs-utils
如果上網被阻擋,用手機連線走外網,公司內部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
這樣只需要一步驟
殘轉繁
txtOrg.Text=StrConv(txtOrg.Text, VbStrConv.TraditionalChinese, 2052)
繁轉殘
txtNew.Text=StrConv(txtNew.Text, VbStrConv.SimplifiedChinese, 2052)
intTotalPage = -1 * Int((-1) * (intTotal / Convert.ToInt32(intPageSize)))
$ npm config set proxy http://aaaaaa:1111
$ npm config set https-proxy http://bbbbbb:222
fuser 8080/tcp
fuser -k 8080/tcp