Android Rsa指數(shù)與模加解密遇到的坑

前言

關(guān)于用Rsa 非對(duì)稱(chēng)算法進(jìn)行加解密,處了常規(guī)的生成公私鑰密鑰對(duì)外截驮,還有一種方式就是通過(guò)指數(shù)與模的形式取得公鑰或者私鑰對(duì)象笑陈,從而進(jìn)行加解密計(jì)算。

常用加解密情形

android端和服務(wù)端是如何使用指數(shù)和模進(jìn)行數(shù)據(jù)的加解密?
主要有以下幾種形式:
A.服務(wù)端根據(jù)客戶端的特殊請(qǐng)求(可以是雙方規(guī)定的請(qǐng)求每天第一次請(qǐng)求之類(lèi)的動(dòng)作)隨機(jī)動(dòng)態(tài)生成一組加密的公私鑰的指數(shù)和模葵袭,并且將公鑰或者私鑰的指數(shù)和模通過(guò)加密的方式傳遞給客戶端(可以是3des-cbc或者其他可靠的加密方式涵妥,保障秘鑰信息的安全性)。然后客戶端每次通訊都用解密后端公鑰或者私鑰對(duì)象進(jìn)行加解密服務(wù)端的數(shù)據(jù)坡锡。
以上所述的場(chǎng)景一般都是用在銀聯(lián)pos端下發(fā)主秘鑰的情形蓬网。
主要流程如下:


image.png

其中1,2個(gè)步奏是關(guān)鍵,部分公司 采用的方式都是客戶端生成8*N字節(jié)的隨機(jī)數(shù)上傳給服務(wù)端生成公私鑰對(duì)鹉勒,客戶端就行3des或者des 的cbc模式界面帆锋,具體看服務(wù)端和客戶端的協(xié)議

B.請(qǐng)各位補(bǔ)充..........

遇到的坑

當(dāng)然今天講的并不是以上的知識(shí)點(diǎn),在這邊記錄下遇到的坑給那些受到傷害的同行一些參考禽额。
坑:
1.指數(shù)和模(這個(gè)是16進(jìn)制的)獲取錯(cuò)誤锯厢。
2.填充方式錯(cuò)誤皮官,除了常見(jiàn)的rsa填充還有其他的填充方式,例如:

代碼示例

獲取公鑰對(duì)象或者是私有對(duì)象实辑,這邊代碼顯示的是獲取公鑰對(duì)象

 public static RSAPublicKey getPublicKey(String modulus, String exponent) {
        try {
            BigInteger b1 = new BigInteger(modulus, 16);  //此處為16進(jìn)制數(shù)捺氢,模
            BigInteger b2 = new BigInteger(exponent, 16); //此處為16進(jìn)制數(shù),指數(shù)
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            RSAPublicKeySpec keySpec = new RSAPublicKeySpec(b1, b2);
            return (RSAPublicKey) keyFactory.generatePublic(keySpec);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

公鑰解密方式

//加密填充方式,列舉常用的3種
  public static final String KEY_ALGORITHM = "RSA";
  public static final String ECB_PKCS1_PADDING = "RSA/ECB/PKCS1Padding";
  public static final String TRANSFORMATION = "RSA/ECB/NoPadding";
public static String decryptByPublicKey(String data, String modules, String component)
            throws Exception {
        RSAPublicKey pubKey = RSAUtils.getPublicKey(modules, component);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, pubKey);
        byte[] b = cipher.doFinal(Convert.str2Bcd(data));
        return Convert.bcd2Str(mainkey);
    }

遇到的坑主要是這邊的填充方式填充錯(cuò)誤剪撬,由于某種原因服務(wù)端的填充方式獲取不到摄乒,所以只能一個(gè)個(gè)測(cè)試過(guò)去。填充方式也是尋求幫助后才找到的婿奔,希望對(duì)大家有用缺狠。

工具類(lèi)bcd2Str代碼(16進(jìn)制字節(jié)數(shù)組轉(zhuǎn)字符串)

public static String bcd2Str(byte[] b) {
        char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        StringBuilder sb = new StringBuilder(b.length * 2);
        for (int i = 0; i < b.length; ++i) {
            sb.append(HEX_DIGITS[((b[i] & 0xF0) >>> 4)]);
            sb.append(HEX_DIGITS[(b[i] & 0xF)]);
        }
        return sb.toString();
    }

關(guān)于怎么創(chuàng)建模和指數(shù)

請(qǐng)參考這篇文章:
https://my.oschina.net/mywiki/blog/1613886

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市萍摊,隨后出現(xiàn)的幾起案子挤茄,更是在濱河造成了極大的恐慌,老刑警劉巖冰木,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穷劈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡踊沸,警方通過(guò)查閱死者的電腦和手機(jī)歇终,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)逼龟,“玉大人评凝,你說(shuō)我怎么就攤上這事∠俾桑” “怎么了奕短?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)匀钧。 經(jīng)常有香客問(wèn)我翎碑,道長(zhǎng),這世上最難降的妖魔是什么之斯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任日杈,我火速辦了婚禮,結(jié)果婚禮上佑刷,老公的妹妹穿的比我還像新娘莉擒。我一直安慰自己,他們只是感情好瘫絮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布啰劲。 她就那樣靜靜地躺著,像睡著了一般檀何。 火紅的嫁衣襯著肌膚如雪蝇裤。 梳的紋絲不亂的頭發(fā)上廷支,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音栓辜,去河邊找鬼恋拍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛藕甩,可吹牛的內(nèi)容都是我干的施敢。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼狭莱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼僵娃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起腋妙,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤默怨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后骤素,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體匙睹,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年济竹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痕檬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡送浊,死狀恐怖梦谜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情袭景,我是刑警寧澤唁桩,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站浴讯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蔼啦。R本人自食惡果不足惜榆纽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捏肢。 院中可真熱鬧奈籽,春花似錦、人聲如沸鸵赫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辩棒。三九已至狼忱,卻和暖如春膨疏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钻弄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工佃却, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窘俺。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓饲帅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親瘤泪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灶泵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容