我需要从.Net WebService提供的salt和密码生成

Java(

Android)中的AES密钥.我需要使用与.net生成的密钥相同的密钥和相同的密码和盐(使用Rfc2898DeriveBytes和AesManaged()).

这是Android中的代码:

char[] passwordAsCharArray = password.toCharArray();

PBEKeySpec pbeKeySpec = new PBEKeySpec(passwordAsCharArray, salt, 1000, 256);

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");

SecretKeySpec secretKey = new SecretKeySpec(factory.generateSecret(spec).getEncoded(), "AES");

这是.net中的代码:

byte[] keyBytes = Encoding.Unicode.GetBytes(key);

Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(key, keyBytes);

AesManaged rijndaelCSP = new AesManaged();

rijndaelCSP.BlockSize = 128;

rijndaelCSP.KeySize = 256;

rijndaelCSP.Key = derivedKey.GetBytes(rijndaelCSP.KeySize / 8);

rijndaelCSP.IV = derivedKey.GetBytes(rijndaelCSP.BlockSize / 8);

ICryptoTransform decryptor = rijndaelCSP.CreateDecryptor();

当我比较两个键时,它们是不同的.任何想法如何在Android上生成与.Net相同的密钥? (我知道.net中生成的密钥是正确的).

.Net中的迭代次数为1000,salt和密码也与Android中的相同.

好吧,事实证明我不需要完全相同的密钥(作为字节数组).我需要这个来解密已经在.Net中加密的文件(用Java) – 用这个键它给我带来Bad Padding Exception所以我认为密钥是不同的并且导致了问题,但我需要做的就是生成IV就像一把钥匙 – 解决了我的问题.谢谢你的回复!

最佳答案 看起来您在.NET代码中使用“密钥”(应该是密码)作为salt,而Java部分使用指定的salt.此外,您指定了用于解码salt的Unicode字符集,这很奇怪,salt应该是从头开始的随机八位字节字符串(== byte array).

我建议您首先将密码和随机盐转换为字节数组,使用十六进制表示(在控制台上或在调试器中)进行比较,然后将它们用作每个中的PBKDF2函数的输入参数.我建议您输入UTF-8编码作为密码.

始终在加密中指定所有参数,尽量不要使用默认值,例如用于迭代计数.如果您的输入由一位关闭,则输出将完全不正确,并且无法确定哪个参数负责.

看起来Java和.NET PBKDF2“原语”在两个平台上是相同的,互联网上有工作代码.

java aes密钥生成_如何在Java(Android)中生成与.Net中相同的AES密钥?相关推荐

  1. java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧

    java中转json字符串 在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON. ...

  2. java整数的因式分解_如何在Java中找到整数的质数-因式分解

    java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...

  3. Java poi 列移动_如何在java xssf中移動列poi

    如何將現有列數據和格式化到Apache POI中的下一列並將下一列移到右側.如何在java xssf中移動列poi 我試過了. 讓說我的代碼是這樣... XSSFCell oldCell = work ...

  4. java 精确到微妙_如何在Java中以微秒精度测量时间?

    我在Internet上看到应该使用System.nanoTime(),但这对我不起作用-它为我提供了毫秒级的时间.我只需要函数执行前后的微秒,就可以知道需要多长时间.我正在使用Windows XP. ...

  5. java 方法当参数_如何在Java中将函数作为参数传递?

    如何在Java中将函数作为参数传递? 这个问题在这里已有答案: Java Pass方法作为参数                                     14个答案 是否可以将方法作为参 ...

  6. java 千位分隔符_如何在Java中设置千位分隔符?

    问题 如何在Java中设置千位分隔符?我有BigDecimal的String表示,我想设置千位分隔符并返回String. #1 热门回答(180 赞) 你可以使用格式功能","; ...

  7. java 判断是否换行_如何在java中检测换行符

    是的,我已经阅读了一些关于换行符的其他帖子,但他们没有帮助我.如何在java中检测换行符 我的Java程序应该读取一个.PHP文件,并将源代码分成逐行格式.问题是我似乎无法区分一个换行符和另一个换行符 ...

  8. java如何实例化集合_如何在java中实例化一个Queue对象?

    Queue是一个接口,这意味着你不能直接构造一个Queue . 最好的select是构造一个已经实现Queue接口的类,如下所示: AbstractQueue , ArrayBlockingQueue ...

  9. java date加月_如何在Java中向当前日期添加一个月?

    LocalDate::plusMonths 例: LocalDate.now( ) .plusMonths( 1 ); 最好指定时区. LocalDate.now( ZoneId.of( " ...

最新文章

  1. golang实现dns域名解析(一)
  2. 在 SAP Analytics Cloud 上开发和使用 Queries
  3. chrome java虚拟机_JATT:谷歌的Java虚拟机自动调整工具
  4. 520 钻石争霸赛 7-5 大勾股定理 (数学)
  5. PICT实现组合测试用例
  6. 美团电单车中标警用车采购项目,上千辆定制版警用电单车上线!
  7. java 路径中代替斜杠_老生常谈java路径中的反斜杠和斜杠的区别
  8. Linux下安装Nginx与配置
  9. 网站通用 敏感词列表
  10. 科立捷默认频率_科立捷(KOLEEJ) 【京东配送·隔日达】民用大功率自驾游酒店地下室隧道4S店对讲机 KLJ-T10...
  11. 解决ISCROLL单击变双击的BUG
  12. WIZ ConfigTool-批量配置WIZnet S2E模块
  13. idea或者goland更改主题颜色背景颜色
  14. elasticsearch api 调用
  15. CSU_WF-中南大学网络服务队2020招新培训-硬件知识
  16. 好安卓博客收集【2022年】
  17. Kotlin笔记27--使用Intent传递数据
  18. Nginx基础应用——日志切割
  19. 彻底理解——指针常量和常量指针、指向常量的常指针
  20. jmeter基础(二)-JMeter证书

热门文章

  1. linux下面子目录绑定域名的方法,.htaccess绑定子域名到子目录方法
  2. 优酷蓝鲸近千节点的Redis集群运维经验总结
  3. pyDes 实现 Python 版的 DES 对称加密/解密--转
  4. Let's do our own full blown HTTP server with Netty--转载
  5. Java 编程的动态性,第 5 部分: 动态转换类--转载
  6. linux 清空文件内容命令
  7. Redis双机热备方案--转
  8. 数学建模学习笔记——优劣解距离法(评价类)
  9. 机器学习算法基础(基础机器学习课程)——第一天
  10. var_export