1. 程式人生 > >AES加密解密Windows下跟linux下結果不同的解決方案

AES加密解密Windows下跟linux下結果不同的解決方案



現象描述:
在 windows 作業系統下加解密正常,但部署到 linux 環境中相同的輸入加密結果不正確,並且每次執行返回的結果都不同。


原理:
加密過程需手動指定隨機數的生成規則,同理在解密過程中也需手動指定隨機數的生成規則。
java.security.SecureRandom
此類提供加密的強隨機數生成器 (RNG)。許多實現都是偽隨機數生成器 (PRNG) 形式,這意味著它們將使用確定的演算法根據實際的隨機種子生成偽隨機序列。其他實現可以生成實際的隨機數,而另一些實現則可能結合使用這兩項技術。
加密的強隨機數至少要遵從《FIPS 140-2, Security Requirements forCryptographic Modules 》中 4.9.1部分指定的統計隨機數生成器測試。另外,SecureRandom 還必須產生非確定性輸出,因此,正如以下文章中所描述的那樣,要求種子材料必須是不可預知的,SecureRandom 的輸出必須是加密的強序列:《RFC 1750:Randomness Recommendationsfor Security 》。
與 Java Security 中其他基於演算法的類一樣,SecureRandom 也提供了與實現無關的演算法,因此,呼叫方(應用程式程式碼)會請求特定的 RNG 演算法並將它傳回到該演算法的 SecureRandom 物件中。如果需要,還可以通過特定的提供程式請求特定的演算法。請參見 getInstance 方法。
因此,有以下兩種請求 SecureRandom 物件的方法:僅指定演算法名稱,或者既指定演算法名稱又指定包提供程式。
l  如果僅指定演算法名稱,如下所示:
SecureRandomrandom = SecureRandom.getInstance("SHA1PRNG");
系統將確定環境中是否有所請求的演算法實現,是否有多個,是否有首選實現。
l  如果既指定了演算法名稱又指定了包提供程式,如下所示:
SecureRandomrandom = SecureRandom.getInstance("SHA1PRNG", "SUN");
系統將確定在所請求的包中是否有演算法實現;如果沒有,則丟擲異常。






現象描述


 KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(128, new SecureRandom(key.getBytes()));




修改後程式碼
  KeyGenerator kgen = KeyGenerator.getInstance("AES");
 SecureRandom random=null;
try {
random = SecureRandom.getInstance("SHA1PRNG","SUN");
} catch (NoSuchProviderException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}




            random.setSeed(key.getBytes());
            kgen.init(128, random);

相關推薦

AES加密解密Windowslinux結果不同解決方案

現象描述: 在 windows 作業系統下加解密正常,但部署到 linux 環境中相同的輸入加密結果不正確,並且每次執行返回的結果都不同。 原理: 加密過程需手動指定隨機數的生成規則,同理在解密過程中也需手動指定隨機數的生成規則。 java.security.Secure

linux訪問windows ftp服務器出現亂碼問題解決方案

linux ftp 在Linux下訪問windows ftp服務器時可能會出現中文亂碼的問題,這是由於中文編碼不同的問題。Windows中文編碼使用的是gbk,而linxu大多數版本默認的編碼是utf8。一種解決方案是在終端使用lftp登錄,手動設置中文編碼方式,在終端中輸入lftp ftp://&l

Windows使用TortoiseGit的無法直接使用linux ssh-key的解決方案

算法 files net 指定 文件 keygen nbsp 比較 tro 寫此文章的重要原因是很多人在windows下使用TortoiseGit時覺得無法直接和Linux系統共用一個密鑰對究其原因是TortoiseGit默認使用PuTTY格式的ssh-key,和linux

實現在windows使用linux的命令的軟體

cygwin64是一種用於windows上,可以執行linux命令的軟體,其實就是一種類linux環境,在windows下使用該軟體,可以執行linux的命令。當然相對於真正的linux系統,該軟體支援的命令要少了很多 具體下載地址詳見,並且有相應的介紹 http://www.cy

Windows檔案放到Linux亂碼解決

原因: 兩種作業系統的中文壓縮方式不同,windows環境中文壓縮一般為gbk,而在linux環境中為UTF-8。 解決辦法: $ iconv -f gbk -t UTF-8 ReadMe.

我將系統從Windows遷移至Linux的點點滴滴

一、寫在最前   由於本人的技術水平有限,難免會出現錯誤。本文對任何一個人有幫助都是我莫大的榮幸,任何一個大神對我的點撥,我都會感激不盡。 二、技術選型   在2013年8月低的時候,公司中了XXX市場監督局肉品配送車輛監控的專案。整個系統軟體部分需要實現的功能不難,最大的難點就是伺服器的系統要求是Li

windows實現Linux的dirent.h API介面

將https://github.com/tronkko/dirent,下的include的dirent.h拷貝到當前工程的目錄下。 在這個工程中,將directory字串轉換為寬位元組的時候,如果目錄是漢字的時候會出現問題。 解決方法: #include <locale.h>

QtCreator程式的釋出:WindowsLinux

Windows下: 說明:使用Qt自帶工具“windeployqt.exe”來拷貝大部分的動態庫(*.dll),一般有以下兩種方法。 前提,將Qt編譯方式選為:Release,把編譯好的*exe檔案拷

windows中使用Python進行AES加密解密-加密解密功能實現

PyCrypto是一款非常實用的Python加密模組,最近寫了一個檔案加密指令碼需要用到AES加密(http://blog.csdn.net/u013578500/article/details/77916990),和大家分析一下心得。 下載與安裝:PyCrypto專案

windowsLinux執行python程式的方法

1 在windows下執行python程式 1)從DOS命令列執行python指令碼   用python直譯器來執行python指令碼,在windows下面python直譯器是python.exe,我的python檔案安裝在D:\Python27,在這個目錄下可

windows中使用Python進行AES加密解密-文字檔案加密工具

之前的文章http://blog.csdn.net/u013578500/article/details/77905924 簡單介紹了一下使用PyCrypto模組實現對字串的加密解密,裡面有提到我利用這個模組寫了一個對文字檔案進行加密解密的小指令碼,這裡和大家分享一下。 1

Windowslinux禪道安裝方法

Windows下安裝方法: 1. 如何啟動禪道:   1.1 點選 ZenTaoPMS.4.0.stable.exe檔案,提取檔案,一定要將xampp目錄放在某一個盤的根目錄,比如c:\xampp, d:\xampp。   1.2 進入xampp目錄,雙擊start.bat

如何在windowslinux獲取檔案(如exe檔案)的詳細資訊和屬性

程式設計師都很懶,你懂的! 最近在專案開發中,由cs開發的exe的程式,需要自動升級,該exe程式放在linux下,自動升級時檢測不到該exe程式的版本號資訊,但是我們客戶端的exe程式需要獲取伺服器上新程式的版本號資訊。最後由我用java實現linux上exe檔案的版本號

Golang 在windows編譯Linux可執行檔案

Golang 支援交叉編譯,在一個平臺上生成另一個平臺的可執行程式,最近使用了一下,非常好用,這裡備忘一下。 Windows 下編譯Linux 64位可執行程式 SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go

Socket程式從Windows移植到Linux的一些注意事項

轉載標明出處:http://www.linuxidc.com/Linux/2008-10/16410.htm 關於這個話題網上流傳的是一個相同的版本,就是那個第一項是標頭檔案的區別,但後面列出的標頭檔案只有#include沒有(估計是原版的在不斷轉載的過程中有人不小心忘

url帶中文引數請求在windowslinux的編碼問題

在工作中遇到的一個坑,帶中文引數的url(https://*/services/homepage/getArea.do?vagueName=%E5%8D%97%E4%BA%AC)在本地請求正常,但是在l

jni在windowslinux的使用

一,在windows下生成dll動態連結庫: java檔案: public class JniEg { //native 檔案,只需宣告不需要實現 public native void display(); public native double su

mysql windows連線linux的mysql

1. 檢視linux mysql是否啟動  ps -ef|grep msyql2. 檢視防火牆是否禁用mysql外部訪問2.1: iptables -vnL 2.2 : iptables -D INPUT 6 3. mysql使用者授權 3.1 mysql連線:mysql -

今天發現python windows執行正常,linux異常

#--coding:gb18030-- #filename:man_pon_alarms.py import pymysql.cursors import xlrd import os import time import glob # Connect to the mysql database #impor

windowslinux安裝redis及redis擴充套件

1.        redis的介紹 Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redi