有沒有一個公式可以將輸入的數字經過計算之後,可以介於32~126之間。
其中輸入的數字一定是介於48~57,以及65~90,不會有其他數字!
有這樣的公式嗎?
謝謝!
2007-02-05 14:51:32 · 3 個解答 · 發問者 吱吱在Yahoo曰: 5 in 電腦與網際網路 ➔ 程式設計
JJ,
的確,我是想做一個加密系統,不過,如果可能的話,可以不是直線對應的函數嗎?
因為這樣比較不會被人家看出規律性!
ps:因為我沒辦法寄mail給你,或是回函,所以還是只能在這邊留言了!
2007-02-06 04:58:46 · update #1
FlyingFree,
你的方法的確是比較好,不過因為我是要做一個加密解密的系統,所以該函數的反函數還必須可以計算出原來輸入的數值。
你的方法我倒回去算之後,我發現無法得到原始輸入值
例如:
輸入 n=48 --> 105.358310n
但是 輸入 105.358310n --> 74 <== 卻得到的是74而不是48
這是我的公式:
data = (n-32)/(94*(94/91.80233223674814));
retData = ((acos(data)*2/pi*29) 61);
所以,不知道你還有沒有其他方式呢?
2007-02-06 04:58:52 · update #2
看起來你是要做 加密的工作
這樣的話 你還得加一個條件
"計算後的數字也必須是整數"
否則 ASCII 碼就無法印了
又 你所輸入的字祇有 36 個
遠小於 32 ~126 的範圍
所以我簡單設計
讓 48 -> 41, 90 -> 125
是一個直線對應
程式:
#include
int incode(int n)
{
return 2*n-55;
}
main()
{
int i;
for (i = 48; i <= 57; i++) printf("%d -> %d\n", i, incode(i));
for (i = 65; i <= 90; i++) printf("%d -> %d\n", i, incode(i));
system("PAUSE");
}
本程式印出編碼前後的對照
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.
2007-02-08 13:09:24 補充:
對於那些有公開 郵箱 者 (我是其中一個)
你都可以直接進入他的檔案 寄信給他
抱歉
沒有再回來看
錯過你的補充
所以 還是請你直接寄信給我
2007-02-05 23:50:39 · answer #1 · answered by JJ 7 · 0⤊ 0⤋
既然是程式
最簡單的方法不就是
32~126範圍之間random 出來42個數(48~57,65~90有42個)存到陣列
而且沒有規律因為是random的陣列
再把48~57,65~90數字對應陣列加密
加密後的數字再對應回去陣列就可以解密
要困難點就 就多random出幾個陣列存起來
加密一次 下個要加密的數就 random選擇看使用那個陣列對應加密
但是這就需要紀錄是那個加密陣列了
要很難破解的就要實作DES、RAS、MD5、橢圓曲線加密了
2007-02-07 07:43:02 補充:
是36個數才對 抱歉 不小心打錯了
2007-02-07 02:40:10 · answer #2 · answered by online 2 · 0⤊ 0⤋
f(n) = cos((n-61)/29*pi/2)*94*(94/91.80233223674814)+32
其中 pi = 2.0*acos(0.0);
精確到小數13位還能符合要求
寫成程式如下
#include
#include
#include
double pi,m;
double f(double n)
{
return cos((n-61)/29*pi/2)*94*(94/91.80233223674814)+32;
}
main()
{
int i;
pi = 2.0 * acos(0.0);
for(i=48;i<=57;i++) printf("%d %lf\n",i,f(i));
for(i=65;i<=90;i++) printf("%d %lf\n",i,f(i));
system("PAUSE");
}
當然還有其他的函式可以達到目標
2007-02-06 18:28:50 補充:
有沒有更明確的條件限制?
像是輸出一定要涵蓋32~126嗎?
輸出有規定要是整數嗎?
2007-02-05 17:22:07 · answer #3 · answered by FlyingFree 2 · 0⤊ 0⤋