Java 17位数字能否通过AES或其他算法加密为15位数字
我使用AES加密一个17位数字,例如12345678901234567,然后我使用Base64对字节[]进行编码。最终结果字符串的长度为24。我想给它打条形码,24个字符太长了。一个由15个字符组成的字符串就好了,大约15个数字(例如123456789012345)就更好了 有什么方法可以达到我的目标吗 算法AES、DES、3DES。。?怎么做 我的DES加密算法Java 17位数字能否通过AES或其他算法加密为15位数字,java,algorithm,encryption,Java,Algorithm,Encryption,我使用AES加密一个17位数字,例如12345678901234567,然后我使用Base64对字节[]进行编码。最终结果字符串的长度为24。我想给它打条形码,24个字符太长了。一个由15个字符组成的字符串就好了,大约15个数字(例如123456789012345)就更好了 有什么方法可以达到我的目标吗 算法AES、DES、3DES。。?怎么做 我的DES加密算法 public static byte[] encrypt(byte[] datasource, String pa
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位数字。在这种情况下,将十进制字符转换为二进制数可能比文本压缩算法提供更好的压缩。17位数字可容纳8个字节;i、 e.爪哇龙 下面是我要做的: 将十进制数字转换为长数字;i、 e.使用Long.parseLong或类似工具解析它。 将long拆分为8个字节,并将它们放入一个字节[]。 加密字节[]。结果应该是8个字节。 Base64对字节进行编码。 如果这样做,则加密的base64编码数字应少于15个字符 注意:我假设你的意思是加密;i、 e.您需要能够解密并恢复原始号码 更新 这可能不适用于许多/最合适的加密算法,因为它们通常具有过大的最小块大小。看见如果你读了这篇文章,你就会了解为什么会这样
您可能应该在这里回顾一下您真正想要实现的目标,并确定加密是否是实现这一目标的最佳方式。什么是数字?我们如何知道哪种加密算法适合您?你没有提供足够的信息来帮助你@MarcusMüller我修改了我的问题,希望这次我说得更清楚一点你的问题没有意义。你不能从品脱罐里拿出一夸脱,也不能把一夸脱放进品脱罐里。无论是加密还是任何其他技术在这里都不起作用。您必须减小输入的大小,否则,如果将其哈希到15位,可能会发生冲突。@EJP 15位是不可能的,13个字符怎么样?请参阅Stephen C的解决方案。他的方法很棒。第三步的结果是16字节。我的代码怎么了?啊。。。您必须使用块大小为16字节的基于块的加密方案。阅读以下内容:+1以获取需求评审请求@罗恩:请试着在问题中阐明你的目标/要求。