急急!!java用des加密的密文用.net解密有什么好方法?

槿木_熙 2020-05-12 12:58:18
java用des加密的密文用.net解密有什么好方法?加密模式为ECB,填充为zero。有什么好的解决方法啊??急
...全文
308 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
槿木_熙 2020-05-12
  • 打赏
  • 举报
回复
引用 12 楼 大西瓜一块五一斤♏ 的回复:
[quote=引用 11 楼 槿木_熙 的回复:] [quote=引用 10 楼 大西瓜一块五一斤♏ 的回复:] [quote=引用 6 楼 槿木_熙 的回复:] [quote=引用 5 楼 手在键盘敲很轻 的回复:] var toEncryptArray = Convert.FromBase64String(cipherText);
我刚试了下你说的方法,提示指定键大小对此算法无效。 密码:bb635dd47e5861f717472df95652077356a8f38dea6347851c191f66b7cf9dc8 密文:Lx/pyWjCfnV3njLrM607sOvTS5tqNOA6[/quote] 明文341221198911262633?[/quote] 对,就这一个网站加密解密是正确的的[/quote] 你密钥长度自己得转一下8字节

        public static string DecryptDes(string content, string desKey)
        {
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider{ Key = Encoding.UTF8.GetBytes(desKey),Mode = CipherMode.ECB})
            {
                using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(content)))
                {
                    using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read))
                    {
                        using (StreamReader sr = new StreamReader(cs))
                        {
                            return sr.ReadLine();
                        }                      
                    }
                }
            }
        }

       string content = "Lx/pyWjCfnV3njLrM607sOvTS5tqNOA6";
       string key = "bb635dd47e5861f717472df95652077356a8f38dea6347851c191f66b7cf9dc8".Substring(0, 8);
       string result= DecryptDes(content, key);
[/quote] 这么假的吗???截取了前八位秘钥啊
  • 打赏
  • 举报
回复
你把java加密的发下
  • 打赏
  • 举报
回复
引用 11 楼 槿木_熙 的回复:
[quote=引用 10 楼 大西瓜一块五一斤♏ 的回复:] [quote=引用 6 楼 槿木_熙 的回复:] [quote=引用 5 楼 手在键盘敲很轻 的回复:] var toEncryptArray = Convert.FromBase64String(cipherText);
我刚试了下你说的方法,提示指定键大小对此算法无效。 密码:bb635dd47e5861f717472df95652077356a8f38dea6347851c191f66b7cf9dc8 密文:Lx/pyWjCfnV3njLrM607sOvTS5tqNOA6[/quote] 明文341221198911262633?[/quote] 对,就这一个网站加密解密是正确的的[/quote] 你密钥长度自己得转一下8字节

        public static string DecryptDes(string content, string desKey)
        {
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider{ Key = Encoding.UTF8.GetBytes(desKey),Mode = CipherMode.ECB})
            {
                using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(content)))
                {
                    using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read))
                    {
                        using (StreamReader sr = new StreamReader(cs))
                        {
                            return sr.ReadLine();
                        }                      
                    }
                }
            }
        }

       string content = "Lx/pyWjCfnV3njLrM607sOvTS5tqNOA6";
       string key = "bb635dd47e5861f717472df95652077356a8f38dea6347851c191f66b7cf9dc8".Substring(0, 8);
       string result= DecryptDes(content, key);
槿木_熙 2020-05-12
  • 打赏
  • 举报
回复
引用 10 楼 大西瓜一块五一斤♏ 的回复:
[quote=引用 6 楼 槿木_熙 的回复:] [quote=引用 5 楼 手在键盘敲很轻 的回复:] var toEncryptArray = Convert.FromBase64String(cipherText);
我刚试了下你说的方法,提示指定键大小对此算法无效。 密码:bb635dd47e5861f717472df95652077356a8f38dea6347851c191f66b7cf9dc8 密文:Lx/pyWjCfnV3njLrM607sOvTS5tqNOA6[/quote] 明文341221198911262633?[/quote] 对,就这一个网站加密解密是正确的的
  • 打赏
  • 举报
回复
引用 6 楼 槿木_熙 的回复:
[quote=引用 5 楼 手在键盘敲很轻 的回复:] var toEncryptArray = Convert.FromBase64String(cipherText);
我刚试了下你说的方法,提示指定键大小对此算法无效。 密码:bb635dd47e5861f717472df95652077356a8f38dea6347851c191f66b7cf9dc8 密文:Lx/pyWjCfnV3njLrM607sOvTS5tqNOA6[/quote] 明文341221198911262633?
槿木_熙 2020-05-12
  • 打赏
  • 举报
回复
引用 8 楼 wanghui0380 的回复:
对于这个的解释,网上很多,我不想解释啥。IV,key java和net是不一样的。 建议直接使用这个 http://www.bouncycastle.org/csharp/ 正是因为不一样才有了这个项目,当然据说net core也觉着不给个东西说不过去,所以也加入了一些,不过我暂时不想研究
大佬能给个解密的实例吗?搞这个裂开了已经....
wanghui0380 2020-05-12
  • 打赏
  • 举报
回复
对于这个的解释,网上很多,我不想解释啥。IV,key java和net是不一样的。 建议直接使用这个 http://www.bouncycastle.org/csharp/ 正是因为不一样才有了这个项目,当然据说net core也觉着不给个东西说不过去,所以也加入了一些,不过我暂时不想研究
ying1234 2020-05-12
  • 打赏
  • 举报
回复
基本于和PHP对接des加解密时的折腾,有必要提醒一下,其实DES在不同语言之间核心算法都是一样的,所以你知道了,加密模式为ECB,填充为zero,并且IV,key都正确的话,OK,那一般不该有问题。但事实上不同语言之间加解密经常出错,原因就是有的有些语言在加密时,作了转换16进制的处理。例如php里的在最终转换base64之前,用了bin2hex() 处理 (ASCII 字符的字符串转换为十六进制值。),你在解密的时候需要把这个转换回去。而你一般网上找来的例子是没有这一步的,所以解密都失败。你确定过java加密时有做过类似bin2hex() 处理吗?
槿木_熙 2020-05-12
  • 打赏
  • 举报
回复
引用 5 楼 手在键盘敲很轻 的回复:
var toEncryptArray = Convert.FromBase64String(cipherText);
我刚试了下你说的方法,提示指定键大小对此算法无效。 密码:bb635dd47e5861f717472df95652077356a8f38dea6347851c191f66b7cf9dc8 密文:Lx/pyWjCfnV3njLrM607sOvTS5tqNOA6
  • 打赏
  • 举报
回复
var toEncryptArray = Convert.FromBase64String(cipherText);
  • 打赏
  • 举报
回复
   
    var rm = new System.Security.Cryptography.RijndaelManaged()
            {
                Key = Convert.FromBase64String("GFqjnlbHe46v40/jEZO88Q=="),
                Mode = CipherMode.ECB,
                Padding = PaddingMode.None
            };
            var cTransform = rm.CreateDecryptor();
            var resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
我之前用过的一个解密,也是java加密的,你参考下
槿木_熙 2020-05-12
  • 打赏
  • 举报
回复
引用 2 楼 wanghui0380 的回复:
也就是在调用DES算法的时候,无论那种语言都会传递进 byte[] IV byte[] key 所以,你需要知道,虽然俺们最外面调用一般就是 string key,但是这里会最终变换成上面两个,net这里早期没有做啥封装,大部分都是直接把string 转换成byte[] 但是java那边不同,他们那边有几十个专用的key生成模块,所以不搞清楚他们用的那个模块算法的,我们很难生成出跟他一样的 byte[] IV byte[] key
java那边用的是ecb模式,所以iv向量这个是没有作用的吧
wanghui0380 2020-05-12
  • 打赏
  • 举报
回复
也就是在调用DES算法的时候,无论那种语言都会传递进 byte[] IV byte[] key 所以,你需要知道,虽然俺们最外面调用一般就是 string key,但是这里会最终变换成上面两个,net这里早期没有做啥封装,大部分都是直接把string 转换成byte[] 但是java那边不同,他们那边有几十个专用的key生成模块,所以不搞清楚他们用的那个模块算法的,我们很难生成出跟他一样的 byte[] IV byte[] key
wanghui0380 2020-05-12
  • 打赏
  • 举报
回复
DES算法是公开的,所以这个没啥好解释的 所以,你现在的问题,不是问我们des如何解密 你需要问,他们的密钥问题。java那边的情况是密钥key这块做了很多类型的key模块。而net默认只有1,2种,所以生成的key往往不一致 所以你首先要问他们的key是啥,让他们告诉你他用的 iv,key以及使用的那个key模块

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧