十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本篇文章要結(jié)合上一節(jié)文章一起看。
創(chuàng)新互聯(lián)專注于成華網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供成華營銷型網(wǎng)站建設(shè),成華網(wǎng)站制作、成華網(wǎng)頁設(shè)計、成華網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造成華網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供成華網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
青鋒愛分享-RSA-Springboot+Python整合
碼云搜索: 青鋒 會有驚喜哦哦。
通過python生成的公鑰私鑰 格式PKCS1 。
生成pem格式如下:
私鑰頭(-----BEGIN RSA PRIVATE KEY-----)
私鑰尾(-----END RSA PRIVATE KEY-----)
我需要將此私鑰轉(zhuǎn)換為DER編碼的PKCS8未加密格式,以便與java服務(wù)器代碼一起使用,特別是PKCS8EncodedKeySpec。我已經(jīng)試過使用rsa和pkcs8命令的OpenSSL,如果有更簡單的辦法,沒有特別需要使用openssl。
RSA私鑰格式PKCS1和PKCS8相互轉(zhuǎn)換
RSA公鑰格式PKCS1和PKCS8相互轉(zhuǎn)換
以下轉(zhuǎn)換基于openssl命令的操作;
執(zhí)行:openssl genrsa -out private.pem 1024
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlLm5+Kosybacfp8hzjn1fl2wT7Au2lm5SEtz6r+/wwSfq5KfY
H8q1AO/C92IwEpplNbrqYmOXQu6P07mg0lQOCvE5sdtmAvD2ex3wCef8lWmgdh5q
Uo4OMcmoSz3IAp/7/FnMag1IelSfdronPBDxazp6NUmQZITsYK6CsEl/ewIDAQAB
AoGBAJkMdvF+i9Kzc6YqMC0rfQJ3Zs+vFOtsbmQVAMnQ8JWBCJ1O8d/c60wRQgyb
lFCyO7VXOmoIJqX/Jr2aER8bFtG+Yxy6jsMu3ynwMwbhcVmCWCmZoWuE5pZdEJk6
lOdOay7TkE45X/Wc7K9iZs2uuB7sylIvK/HVxxit6FGePa4RAkEA9e+VoAbxBv78
HyxRcStW+Kc3lmE4zYBGAb2IYx48UEN34nP5rI8Tusqsy7CZ3rvSMi1CpVlj2eQK
FU8FzVFyjwJBAO6PU9q7il8NtecdvYBkDErlCawSeCdk9s79helT0Mrg9cWaVWFO
n0UxgT55MPXWGdMRXUUOCNnMilaw/p7dKlUCQDpjGeu3GivmB2dDN0ad2nUIBftu
s3SeWoB5RdL6T6liiyi5DfJ4uV9kVKe7Epy9jIabFjJ5SWpmaDps21zGVGMCQQCB
HvK0IW3zpOgf/+jh5UUCBJYHnLeMGwm7X11rvQH1zW05Vx9/W565ROI/fjkR1qCD
rZJeHgqMWDlIUuR9+BdBAkAI8+JWgWLdWceXX9Puu4KNmGukx4GZw2n53vMKp0Fu
puQxMonRWTN+kA76cq8QIj8xuEBkdxy1NFRMEkGu675m
-----END RSA PRIVATE KEY-----
執(zhí)行:openssl pkcs8 -topk8 -inform PEM -in private.pem -outform pem -nocrypt -out pkcs8.pem
-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOUubn4qizJtpx+n
yHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+rkp9gfyrUA78L3YjASmmU1uupiY5dC7o/T
uaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4xyahLPcgCn/v8WcxqDUh6VJ92
uic8EPFrOno1SZBkhOxgroKwSX97AgMBAAECgYEAmQx28X6L0rNzpiowLSt9Andm
z68U62xuZBUAydDwlYEInU7x39zrTBFCDJuUULI7tVc6aggmpf8mvZoRHxsW0b5j
HLqOwy7fKfAzBuFxWYJYKZmha4Tmll0QmTqU505rLtOQTjlf9Zzsr2Jmza64HuzK
Ui8r8dXHGK3oUZ49rhECQQD175WgBvEG/vwfLFFxK1b4pzeWYTjNgEYBvYhjHjxQ
Q3fic/msjxO6yqzLsJneu9IyLUKlWWPZ5AoVTwXNUXKPAkEA7o9T2ruKXw215x29
gGQMSuUJrBJ4J2T2zv2F6VPQyuD1xZpVYU6fRTGBPnkw9dYZ0xFdRQ4I2cyKVrD+
nt0qVQJAOmMZ67caK+YHZ0M3Rp3adQgF+26zdJ5agHlF0vpPqWKLKLkN8ni5X2RU
p7sSnL2MhpsWMnlJamZoOmzbXMZUYwJBAIEe8rQhbfOk6B//6OHlRQIElgect4wb
CbtfXWu9AfXNbTlXH39bnrlE4j9+ORHWoIOtkl4eCoxYOUhS5H34F0ECQAjz4laB
Yt1Zx5df0+67go2Ya6THgZnDafne8wqnQW6m5DEyidFZM36QDvpyrxAiPzG4QGR3
HLU0VEwSQa7rvmY=
-----END PRIVATE KEY-----
執(zhí)行:openssl rsa -in pkcs8.pem -out pkcs1.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlLm5+Kosybacfp8hzjn1fl2wT7Au2lm5SEtz6r+/wwSfq5KfY
H8q1AO/C92IwEpplNbrqYmOXQu6P07mg0lQOCvE5sdtmAvD2ex3wCef8lWmgdh5q
Uo4OMcmoSz3IAp/7/FnMag1IelSfdronPBDxazp6NUmQZITsYK6CsEl/ewIDAQAB
AoGBAJkMdvF+i9Kzc6YqMC0rfQJ3Zs+vFOtsbmQVAMnQ8JWBCJ1O8d/c60wRQgyb
lFCyO7VXOmoIJqX/Jr2aER8bFtG+Yxy6jsMu3ynwMwbhcVmCWCmZoWuE5pZdEJk6
lOdOay7TkE45X/Wc7K9iZs2uuB7sylIvK/HVxxit6FGePa4RAkEA9e+VoAbxBv78
HyxRcStW+Kc3lmE4zYBGAb2IYx48UEN34nP5rI8Tusqsy7CZ3rvSMi1CpVlj2eQK
FU8FzVFyjwJBAO6PU9q7il8NtecdvYBkDErlCawSeCdk9s79helT0Mrg9cWaVWFO
n0UxgT55MPXWGdMRXUUOCNnMilaw/p7dKlUCQDpjGeu3GivmB2dDN0ad2nUIBftu
s3SeWoB5RdL6T6liiyi5DfJ4uV9kVKe7Epy9jIabFjJ5SWpmaDps21zGVGMCQQCB
HvK0IW3zpOgf/+jh5UUCBJYHnLeMGwm7X11rvQH1zW05Vx9/W565ROI/fjkR1qCD
rZJeHgqMWDlIUuR9+BdBAkAI8+JWgWLdWceXX9Puu4KNmGukx4GZw2n53vMKp0Fu
puQxMonRWTN+kA76cq8QIj8xuEBkdxy1NFRMEkGu675m
-----END RSA PRIVATE KEY-----
可以看出結(jié)果和1是一致的;
執(zhí)行:openssl rsa -in private.pem -pubout -out public.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlLm5+Kosybacfp8hzjn1fl2wT
7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/C92IwEpplNbrqYmOXQu6P07mg0lQOCvE5
sdtmAvD2ex3wCef8lWmgdh5qUo4OMcmoSz3IAp/7/FnMag1IelSfdronPBDxazp6
NUmQZITsYK6CsEl/ewIDAQAB
-----END PUBLIC KEY-----
5. 從pkcs8私鑰中生成pkcs8公鑰
執(zhí)行:openssl rsa -in pkcs8.pem -pubout -out public_pkcs8.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlLm5+Kosybacfp8hzjn1fl2wT
7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/C92IwEpplNbrqYmOXQu6P07mg0lQOCvE5
sdtmAvD2ex3wCef8lWmgdh5qUo4OMcmoSz3IAp/7/FnMag1IelSfdronPBDxazp6
NUmQZITsYK6CsEl/ewIDAQAB
-----END PUBLIC KEY-----
可以看出結(jié)果和4是一樣的;
執(zhí)行:openssl rsa -pubin -in public.pem -RSAPublicKey_out
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOUubn4qizJtpx+nyHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+rkp9gfyrUA
78L3YjASmmU1uupiY5dC7o/TuaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4x
yahLPcgCn/v8WcxqDUh6VJ92uic8EPFrOno1SZBkhOxgroKwSX97AgMBAAE=
-----END RSA PUBLIC KEY-----
openssl rsa -pubin -in public_pkcs8.pem -RSAPublicKey_out
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOUubn4qizJtpx+nyHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+rkp9gfyrUA
78L3YjASmmU1uupiY5dC7o/TuaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4x
yahLPcgCn/v8WcxqDUh6VJ92uic8EPFrOno1SZBkhOxgroKwSX97AgMBAAE=
-----END RSA PUBLIC KEY-----
可以看出轉(zhuǎn)換的結(jié)果是一致的;
執(zhí)行:openssl rsa -RSAPublicKey_in -in pub_pkcs1.pem -pubout
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlLm5+Kosybacfp8hzjn1fl2wT
7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/C92IwEpplNbrqYmOXQu6P07mg0lQOCvE5
sdtmAvD2ex3wCef8lWmgdh5qUo4OMcmoSz3IAp/7/FnMag1IelSfdronPBDxazp6
NUmQZITsYK6CsEl/ewIDAQAB
-----END PUBLIC KEY-----
可以看到和上面4,5的結(jié)果是一致的;
最后一點:
iOS上用的是pkcs8格式的公鑰
openssl用的是pkcs1格式的公鑰
知道私鑰以后是可以導(dǎo)出公鑰的,所以私鑰一定要保證安全
知道公鑰不可以導(dǎo)出私鑰
解決方案針對是window電腦。
配置:SystemRoot/ System32 環(huán)境變量。
1、郵件我的電腦-選擇下【屬性】。
2、選擇高級系統(tǒng)設(shè)置
3、選擇【高級】-【環(huán)境變量】
4、雙擊打開path,進行編輯
5、 接著我們在這名字后面加【;System32】就可以了。
安裝 Win64 OpenSSL,地址:
下載后根據(jù)提示一步一步安裝,安裝完成后:
雙擊start.bat 啟動
嚴(yán)格說起來,如果wc是隨時間變化的,傳遞函數(shù)的概念是否適用就要打個問號的——因為傳遞函數(shù)就其本質(zhì)而言,是針對線性時不變系統(tǒng)的。而你所說的情況顯然屬于時變系統(tǒng)(甚至是非線性系統(tǒng))。
如果的確想要在Simulink中試一試,可以采用這樣的做法:使用MATLAB?Fcn模塊,其輸入為變量wc,輸出隨便(沒什么用但必須賦值),函數(shù)內(nèi)容如下:
function?y=setTF(wc)
set_param([gcs?'/Transfer?Fcn'],'Denominator',mat2str([1?wc]));
y=T;
其中直接引用了模塊的名字,需要根據(jù)你的模型實際情況修改。
下圖給出了示例的方框圖和仿真結(jié)果:
如果你要更精確的,就需要使用系統(tǒng)API來獲取了。
windows sdk下面有幾個獲取CPU時鐘的函數(shù),我記得一個gettickcount(),返回開機到調(diào)用時的毫秒數(shù)(像360之類的軟件的計算系統(tǒng)啟動時間就是調(diào)用這個api)可以用來計算運行時間。實際上還有更精確的,我沒有用過(因為毫秒對我就夠用了),所以不記得名字,我搜了一下,給你附了個鏈接。
記得#include windows.h
再想到一點,如果你是用linux的話,我就不太熟了……
只要你有樂譜。根據(jù)樂理,就可以走在調(diào)上。比如:
你可以寫一個文件,存儲你自己的聲音格式:
struct tagSound
{
int frequency; //頻率
int soundDelay; //發(fā)音時間(單位ms)
int nosoundDelay; //發(fā)完音之后暫停的時間(單位ms)
};
1。音符與頻率的關(guān)系
========低音部分
低1DO:262
#1DO#:277
低2RE:294
#2RE#:311
低3MI:330
低4FA:349
#4FA#:370
低5SO:392
#5SO#:415
低6LA:440
#6LA#:466
低7SI:494
========中音部分=低音X2
中1DO:523 956us FC44;
#1DO#:554 902us
中2RE:578 865us FC9F;
#2RE#:622 803us
中3MI:659 759us FD09;
中4FA:698 716us FD34
#4FA#:740
中5SO:784 638us FD82
#5SO#:831
中6LA:880 568us FDC8
#6LA#:932
中7SI:988 506us FE06
========高音部分=中音X2
高1DO:1046
#1DO#:1109
高2RE:1175
#2RE#:1245
高3MI:1318
高4FA:1480
#4FA#:1480
高5SO:1568
#5SO#:1661
高6LA:1760
#6LA#:1865
高7SI:1976
“#”表示半音,用于上升或下降半個音
2。頻率的產(chǎn)生
利用定時器來控制IO口的高低變化實現(xiàn)
周期=1/頻率
半周期中斷產(chǎn)生IO口電平
定時時間常數(shù)按照單片機的方式計算
3。音樂節(jié)拍的產(chǎn)生
每個音符用1個字節(jié),字節(jié)的高4位代表音符的高低,低4位代表
音符的節(jié)拍,如果 1節(jié)拍是0.4秒,則1/4拍就是0.1秒。
其他節(jié)拍為1/4拍的整數(shù)倍。
4。節(jié)拍與節(jié)拍碼對照表
節(jié)拍 節(jié)拍數(shù) 節(jié)拍數(shù)
1 1/4 1/8
2 2/4 2/8
3 3/4 3/8
4 1 1/2
5 5/4 5/8
6 6/4 6/8
8 2 1
A 10/4 5/4
C 3 12/8
F 15/4
曲調(diào) 1/4拍的延遲時間 1/8拍的延遲時間
4/4 125ms 62ms
3/4 187ms 94ms
2/4 250ms 125ms
不過,真的好不準(zhǔn)。
這樣就可以編輯文件了。
送你一個函數(shù):
void MyDelay(long tt) /*暫停tt個百分之一秒*/
{
struct time now,last;
gettime(last);
gettime(now);
while((((now.ti_sec-last.ti_sec)*100+now.ti_hund-last.ti_hund))tt)
{
gettime(now);
}
}
這個函數(shù)可以暫停 0.01*tt 秒。
循環(huán)使用下面的句子:
Beep(frequency,soundDelay);
MyDelay(nosoundDelay/10);
就可以模擬那個音樂了。
在C語言里可以循環(huán)使用:
sound(frequency);
MyDelay(soundDelay/10);
nosound();
MyDelay(nosoundDelay/10);
就可以了
地理處理工具的坐標(biāo),通過 Python 使用函數(shù)
該參數(shù)的字符串類似如下所示:PROJCS['North_America_Equidistant_Conic',GEOGCS['GCS_North_American_1983',DATUM
['D_North_American_1983',SPHEROID['GRS_1980',6378137.0,298.257222101]],PRIMEM['Greenwich',0.0],UNIT
-----------------------------------
7×24小時在線為您解答!
不懂請【追問】,滿意請【采納】,再問請【求助知友】
不知道你的str1 是不是CString 是的話可以用
CString Mid( int nFirst ) const;
CString Mid( int nFirst, int nCount ) const;
還有個substring也是截取的 用法和Mid一樣
可以使用Find查找",如下:
CString str=_T("PROJCS[\"UTM Zone 51, Northern Hemisphere\",GEOGCS[\"WGS84\",DATUM[\"WGS_1984\",SPHEROID");
int index = str.Find('\"');
CString temp = str.Mid(index+1);
CString temp1 = temp.Mid(0,temp.Find('\"'));
temp就為UTM Zone 51, Northern Hemisphere",GEOGCS["WGS84",DATUM["WGS_1984",SPHEROID
temp1就為UTM Zone 51, Northern Hemisphere