AESを使用して17桁の番号(たとえば123456789)を暗号化した後、byte[]
をBase64でエンコードします。最終的な結果の文字列の長さは24です。私はそれをバーコードしたい、24文字が長すぎます。 15文字で構成された1つの文字列は良好で、約15桁(たとえば123456789)が良いでしょう。は17桁でAESなどのアルゴリズムで15桁の数字に暗号化することができます
アルゴリズム(AES、DES、3DES ..)で私の目標を達成する方法はありますか?そしてどうやって?
マイDESの暗号化アルゴリズム、
public static byte[] encrypt(byte[] datasource, String password) {
try{
SecureRandom random = new SecureRandom();
DESKeySpec desKey = new DESKeySpec(password.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekey = keyFactory.generateSecret(desKey);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
return cipher.doFinal(datasource);
}catch(Throwable e){
e.printStackTrace();
}
return null;
}
private static void longToByteArray(long l, byte[] b) {
b[7] = (byte) (l);
l >>>= 8;
b[6] = (byte) (l);
l >>>= 8;
b[5] = (byte) (l);
l >>>= 8;
b[4] = (byte) (l);
l >>>= 8;
b[3] = (byte) (l);
l >>>= 8;
b[2] = (byte) (l);
l >>>= 8;
b[1] = (byte) (l);
l >>>= 8;
b[0] = (byte) (l);
}
long aliveTime = Long.parseLong("13664547854160806");
byte[] longAsBytes = new byte[8];
longToByteArray(aliveTime, longAsBytes);
byte[] result = DES.encrypt(longAsBytes, password);
String en = REncrypt.base64Encode(result);
「17デジタル」とは何ですか?どの暗号化アルゴリズムが適切なのかあなたは、あなたを助けるのに十分な情報を与えていません! –
@MarcusMüller私は私の質問を修正します、この時間を私はそれをもう少し明確に言うことを願っています – Ron
あなたの質問は理にかなっていません。パイントポットからクォートを得ることはできませんし、パイントポットにクォートを入れることもできません。暗号化も他の技術もここでは動作しません。 * input *のサイズを減らさなければならない、あるいは15桁までハッシュした場合に起こりうる衝突を許容する必要があります。 – EJP