既然高並發了務必要考慮吞吐量吧,進行同步不是一個好的選擇。其實你可以把加密演算法與私鑰封裝進一個類里,然後每次請求實例化這個類,創建一個實體,之後進行解密就行了。
❷ php中RSA加密,明文超長,需要分段加密該怎麼做
這方面的話我不是很了解,一般來說,加密分為兩個部分,一個是非對稱加密,一個是對稱加密,使用對稱加密加密正文信息,使用非對稱加密加密對稱加密的密鑰,然後發送加密數據(消息摘要和數字簽名就不討論了),這是正規的數據加密策略,對稱加密默認支持大數據分段加密策略,你只需要從介面中完成加密即可,而且對稱加密速度比非對稱加密快很多,如果你需要使用這個策略建議使用AES。
如果你不願意使用對稱加密,只願意使用AES加密,那你就必須喪失速度了,而且自己處理分段加密,因為RSA加密通常是117個位元組就要分段(這個長度可能和密鑰長度有關,我是用的介面是117),你需要自己把數據變成N個117位元組的數據段來完成加密,解密也需要自己完成位元組拼裝。詳細還是建議你去後盾人平台去看看視頻教學吧,那裡面有的,講的很清楚。
❸ 1024位的RSA加密速度到2015年最快達到多少2048位的呢
RSA的演算法現在基本是固定的,加密速度和你的硬體有關,硬體越好,速度越快。
雖然說RSA算是比較慢的一種加密演算法了,但是他的安全性很好,幾乎沒有一種完善的破解方式,而且就目前來說,速度也還能接受,算是比較主流的一種數據加密方式。許多https證書加密就是RSA,而且是2048位的加密。
但要是說具體有多快就不清楚了。
❹ 有關C#中RSA加密方法的密鑰生成長度
/// <summary> /// 字元串加密操作類
/// </summary>
public class EncryptionOperation
{
/// <summary>
/// MD5 加密靜態方法
/// </summary>
/// <param name="EncryptString">待加密的密文</param>
/// <returns>returns</returns>
public static string MD5Encrypt(string EncryptString) {
if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得為空")); }
MD5 m_ClassMD5 = new MD5CryptoServiceProvider();
string m_strEncrypt = "";
try {
m_strEncrypt = BitConverter.ToString(m_ClassMD5.ComputeHash(Encoding.Default.GetBytes(EncryptString))).Replace("-", "");
}
catch (ArgumentException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_ClassMD5.Clear(); }
return m_strEncrypt;
}
/// <summary>
/// DES 加密(數據加密標准,速度較快,適用於加密大量數據的場合)
/// </summary>
/// <param name="EncryptString">待加密的密文</param>
/// <param name="EncryptKey">加密的密鑰</param>
/// <returns>returns</returns>
public static string DESEncrypt(string EncryptString, string EncryptKey) {
if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得為空")); }
if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密鑰不得為空")); }
if (EncryptKey.Length != 8) { throw (new Exception("密鑰必須為8位")); }
byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
string m_strEncrypt = "";
DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();
try {
byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);
m_cstream.Write(m_btEncryptString, 0, m_btEncryptString.Length);
m_cstream.FlushFinalBlock();
m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_cstream.Close(); m_cstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_DESProvider.Clear(); }
return m_strEncrypt;
}
/// <summary>
/// DES 解密(數據加密標准,速度較快,適用於加密大量數據的場合)
/// </summary>
/// <param name="DecryptString">待解密的密文</param>
/// <param name="DecryptKey">解密的密鑰</param>
/// <returns>returns</returns>
public static string DESDecrypt(string DecryptString, string DecryptKey) {
if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得為空")); }
if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密鑰不得為空")); }
if (DecryptKey.Length != 8) { throw (new Exception("密鑰必須為8位")); }
byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
string m_strDecrypt = "";
DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();
try {
byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);
m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);
m_cstream.FlushFinalBlock();
m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_cstream.Close(); m_cstream.Dispose();
}
catch (IOException ex) {
m_strDecrypt = "";
}
catch (CryptographicException ex) { m_strDecrypt = ""; }
catch (ArgumentException ex) { m_strDecrypt = ""; }
catch (Exception ex) { m_strDecrypt = ""; }
finally { m_DESProvider.Clear(); }
return m_strDecrypt;
}
/// <summary>
/// RC2 加密(用變長密鑰對大量數據進行加密)
/// </summary>
/// <param name="EncryptString">待加密密文</param>
/// <param name="EncryptKey">加密密鑰</param>
/// <returns>returns</returns>
public static string RC2Encrypt(string EncryptString, string EncryptKey) {
if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得為空")); }
if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密鑰不得為空")); }
if (EncryptKey.Length < 5 || EncryptKey.Length > 16) { throw (new Exception("密鑰必須為5-16位")); }
string m_strEncrypt = "";
byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
RC2CryptoServiceProvider m_RC2Provider = new RC2CryptoServiceProvider();
try {
byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_cstream = new CryptoStream(m_stream, m_RC2Provider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);
m_cstream.Write(m_btEncryptString, 0, m_btEncryptString.Length);
m_cstream.FlushFinalBlock();
m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_cstream.Close(); m_cstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_RC2Provider.Clear(); }
return m_strEncrypt;
}
/// <summary>
/// RC2 解密(用變長密鑰對大量數據進行加密)
/// </summary>
/// <param name="DecryptString">待解密密文</param>
/// <param name="DecryptKey">解密密鑰</param>
/// <returns>returns</returns>
public static string RC2Decrypt(string DecryptString, string DecryptKey) {
if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得為空")); }
if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密鑰不得為空")); }
if (DecryptKey.Length < 5 || DecryptKey.Length > 16) { throw (new Exception("密鑰必須為5-16位")); }
byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
string m_strDecrypt = "";
RC2CryptoServiceProvider m_RC2Provider = new RC2CryptoServiceProvider();
try {
byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_cstream = new CryptoStream(m_stream, m_RC2Provider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);
m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);
m_cstream.FlushFinalBlock();
m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_cstream.Close(); m_cstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_RC2Provider.Clear(); }
return m_strDecrypt;
}
/// <summary>
/// 3DES 加密(基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高)
/// </summary>
/// <param name="EncryptString">待加密密文</param>
/// <param name="EncryptKey1">密鑰一</param>
/// <param name="EncryptKey2">密鑰二</param>
/// <param name="EncryptKey3">密鑰三</param>
/// <returns>returns</returns>
public static string DES3Encrypt(string EncryptString, string EncryptKey1, string EncryptKey2, string EncryptKey3) {
string m_strEncrypt = "";
try {
m_strEncrypt = DESEncrypt(EncryptString, EncryptKey3);
m_strEncrypt = DESEncrypt(m_strEncrypt, EncryptKey2);
m_strEncrypt = DESEncrypt(m_strEncrypt, EncryptKey1);
}
catch (Exception ex) { throw ex; }
return m_strEncrypt;
}
/// <summary>
/// 3DES 解密(基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高)
/// </summary>
/// <param name="DecryptString">待解密密文</param>
/// <param name="DecryptKey1">密鑰一</param>
/// <param name="DecryptKey2">密鑰二</param>
/// <param name="DecryptKey3">密鑰三</param>
/// <returns>returns</returns>
public static string DES3Decrypt(string DecryptString, string DecryptKey1, string DecryptKey2, string DecryptKey3) {
string m_strDecrypt = "";
try {
m_strDecrypt = DESDecrypt(DecryptString, DecryptKey1);
m_strDecrypt = DESDecrypt(m_strDecrypt, DecryptKey2);
m_strDecrypt = DESDecrypt(m_strDecrypt, DecryptKey3);
}
catch (Exception ex) { throw ex; }
return m_strDecrypt;
}
/// <summary>
/// AES 加密(高級加密標准,是下一代的加密演算法標准,速度快,安全級別高,目前 AES 標準的一個實現是 Rijndael 演算法)
/// </summary>
/// <param name="EncryptString">待加密密文</param>
/// <param name="EncryptKey">加密密鑰</param>
/// <returns></returns>
public static string AESEncrypt(string EncryptString, string EncryptKey) {
if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得為空")); }
if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密鑰不得為空")); }
string m_strEncrypt = "";
byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ==");
Rijndael m_AESProvider = Rijndael.Create();
try {
byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_csstream = new CryptoStream(m_stream, m_AESProvider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);
m_csstream.Write(m_btEncryptString, 0, m_btEncryptString.Length); m_csstream.FlushFinalBlock();
m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_csstream.Close(); m_csstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_AESProvider.Clear(); }
return m_strEncrypt;
}
/// <summary>
/// AES 解密(高級加密標准,是下一代的加密演算法標准,速度快,安全級別高,目前 AES 標準的一個實現是 Rijndael 演算法)
/// </summary>
/// <param name="DecryptString">待解密密文</param>
/// <param name="DecryptKey">解密密鑰</param>
/// <returns></returns>
public static string AESDecrypt(string DecryptString, string DecryptKey) {
if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得為空")); }
if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密鑰不得為空")); }
string m_strDecrypt = "";
byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ==");
Rijndael m_AESProvider = Rijndael.Create();
try {
byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);
MemoryStream m_stream = new MemoryStream();
CryptoStream m_csstream = new CryptoStream(m_stream, m_AESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);
m_csstream.Write(m_btDecryptString, 0, m_btDecryptString.Length); m_csstream.FlushFinalBlock();
m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());
m_stream.Close(); m_stream.Dispose();
m_csstream.Close(); m_csstream.Dispose();
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
finally { m_AESProvider.Clear(); }
return m_strDecrypt;
} }
❺ php openssl rsa 加密長度大於117,返回false,無法加密,求解決辦法
把你自己的字元串分開,每100個字元串成一個,然後分開加密相連,解密的時候也是如此
❻ RSA加密.秘鑰長度2048是不是必須是實際數位正好達到2048
你說的對。
❼ DES、RSA的明文長度和密文長度分別是多少
加密的明文長度不能超過RSA密鑰的長度-11,比如1024位的,明文長度不能超過117。 密文的長度總是密鑰的長度的一半,比如1024位的,密文長度是64,如果是1032位,密文長度是65位。
❽ rsa中為什麼加密後的長度不想同
RSA是一種塊文件加密系統,他需要將輸入的數據分成固定大小的塊,然後對這些數據塊進行加密。加密以後輸出的數據塊長度和輸入時一樣的。你發現加密後的長度不同的話,應該是RSA加密的那個padding(填充)配置不一樣,從而使得每次加密數據塊的長度不同,這樣最後出來的長度也就不一樣了。
❾ Rsa 演算法加密的數據塊大小問題
PQ的積M叫做模,模規定了這個數字空間中最大的數,是這個空間的邊界,這個空間中所有的數都要小於模M,包括被加密的消息塊。所以如果消息(a1,a2,a3...)任何一個超過了M,加密後都無法正切解密,因為加密後和解密後得到的數都在這個空間中,不可能得到一個大於M的數。
但是如果用來加密的消息A大於M,解密後得到的結果加上K倍的M一定會等於A,因為加密的過程是做模乘操作,大於M的消息A首先被除M然後取余數了,該余數一定小於M,然後所有的加密操作都是針對該余數來進行的,想要還原A的話用該A模M的余數加上數倍的M就可以了。解密的話還原的也是該余數,得到余數後還原A,也是加上數倍的M就可以了。
實質上RSA的加密有個條件,消息A必須要小於M。