RSA 登陸加密與解密

2021-09-29 06:03:59 字數 2806 閱讀 4802

最近公司專案驗收後,客戶請來的資訊保安技術人員對我們的**進行了各種安全測試與排查問題,其中就有乙個登陸時的加密問題。本來如果只是單純的加密,可以直接在前台用md5加密,將加密的值新增到資料庫即可。但是現在的專案裡有很多的使用者,密碼也是後台md5加密了的。這樣就不能單純在前台用md5加密,可能是本人能力有限,使用的前台md5加密與後台的md5加密的值不一致,使用者登陸在密碼比對的時候就會失敗登陸不了。只能使用非對稱加密,前台加密後台解密後使用md5加密再作對比,這種做法才能使用改動最少。網上查資料後就使用了rsa非對稱加密。

前端**

後端**

var publickey = "公鑰可以用工具生成"

var privatekey = "私鑰可以用工具生成「

rsacrypto rsacrypto = new rsacrypto(privatekey, publickey);

userpwd = rsacrypto.decrypt(userpwd);    //解密後的密碼,就是輸入密碼的值

///

/// rsa非對稱加密

///

public class rsacrypto

if (!string.isnullorempty(publickey))

}public string decrypt(string ciphertext)

return encoding.utf8.getstring(_privatekeyrsaprovider.decrypt(system.convert.frombase64string(ciphertext), false));

}public string encrypt(string text)

return convert.tobase64string(_publickeyrsaprovider.encrypt(encoding.utf8.getbytes(text), false));

}private rsacryptoserviceprovider creatersaproviderfromprivatekey(string privatekey)

rsa.importparameters(rsaparams);

return rsa;

}private int getintegersize(binaryreader binr)

;count = bitconverter.toint32(modint, 0);

}else

while (binr.readbyte() == 0x00)

binr.basestream.seek(-1, seekorigin.current);

return count;

}private rsacryptoserviceprovider creatersaproviderfrompublickey(string publickeystring)

;byte x509key;

byte seq = new byte[15];

int x509size;

x509key = convert.frombase64string(publickeystring);

x509size = x509key.length;

// --------- set up stream to read the asn.1 encoded subjectpublickeyinfo blob ------

using (memorystream mem = new memorystream(x509key))

else

return null;

byte modint = ; //reverse byte order since asn.1 key uses big endian order

int modsize = bitconverter.toint32(modint, 0);

int firstbyte = binr.peekchar();

if (firstbyte == 0x00)

byte modulus = binr.readbytes(modsize); //read the modulus bytes

if (binr.readbyte() != 0x02) //expect an integer for the exponent data

return null;

int expbytes = (int)binr.readbyte(); // should only need one byte for actual exponent data (for all useful values)

byte exponent = binr.readbytes(expbytes);

// ------- create rsacryptoserviceprovider instance and initialize with public key -----

rsacryptoserviceprovider rsa = new rsacryptoserviceprovider();

rsaparameters rsakeyinfo = new rsaparameters();

rsakeyinfo.modulus = modulus;

rsakeyinfo.exponent = exponent;

rsa.importparameters(rsakeyinfo);

return rsa;}}

}private bool comparebytearrays(byte a, byte b)

return true;}}

rsa金鑰對生成工具---------

請選用pkcs#1來生成公鑰與私鑰

RSA加密與解密講解

這裡只是講講rsa rsars a是怎麼加密以及怎麼解密。採用r sa rsars a的方法後可以得到乙個公鑰 n,e n,e n,e 和私鑰 n,d n,d n,d 對於乙個明文a aa,我們把它加密得到b bb,b a emod nb a e mod n b aemo dn。我們把b bb,發給...

RSA加密解密

擷取自我的部落格 因為專案需要,最近做乙個rsa加密解密的介面,使用go進行開發,介面使用jsonrpc,go 對rsa加密解密有很好的支援,不過由於受限於底層微控制器,所以上層應用需要做一些稍微的調整。rsa是一種非對稱加密演算法,什麼是非對稱加密演算法呢,那就是公鑰 私鑰可互相進行加密解密 公鑰...

RSA加密解密

rsa加密使用公鑰加密,使用私鑰解密,rsa可以自己隨機生成一組公鑰和私鑰 rsa隨機生成一組公鑰和秘鑰 隨機生成公鑰和秘鑰 沒建立乙個rsacryptoserviceprovider物件,能生成一組隨機的秘鑰,物件相同不管執行多少次方法都是生成的同一組秘鑰 公鑰 私鑰 public static ...